diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..e28f0cdf --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# Default reviewer for everything. Add narrower rules below as the team grows. +* @itsmeakhil diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..2b455ee4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# Shows the "Sponsor" button on the repo. Requires the listed account to be +# enrolled at https://github.com/sponsors. +github: [itsmeakhil] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index dd84ea78..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..e5a3617a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,105 @@ +name: 🐛 Bug report +description: Something in MyDevTools is broken or behaves unexpectedly +labels: ["bug", "needs triage"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to report this. + + **Security vulnerability?** Do **not** file it here — report it privately via + [Security advisories](https://github.com/mydevtools-tech/mydevtools/security/advisories/new). + + **Please redact secrets.** No real tokens, passwords or production connection + strings in a public issue — reproduce with dummy data. + + - type: checkboxes + id: checks + attributes: + label: Before you start + options: + - label: I searched [existing issues](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue) and found nothing related. + required: true + - label: I am on the [latest release](https://github.com/mydevtools-tech/mydevtools/releases/latest), or the bug is also there. + required: false + + - type: input + id: tool + attributes: + label: Which tool? + placeholder: e.g. JSON Formatter, API Client, SQL Client, Password Manager, app-wide + validations: + required: true + + - type: textarea + id: what + attributes: + label: What happened? + description: What you did, what you expected, what happened instead. + placeholder: | + 1. Open '...' + 2. Enter '...' + 3. Click '...' + 4. See error + validations: + required: true + + - type: textarea + id: sample + attributes: + label: Sample input (if relevant) + description: The smallest input that triggers it — secrets replaced by dummy values. + render: text + + - type: checkboxes + id: severity + attributes: + label: How bad is it? + options: + - label: Makes MyDevTools unusable for me + - label: Slows me down but I can keep working + - label: Annoying + - label: Worked in a previous version, broken in the current one + + - type: input + id: version + attributes: + label: MyDevTools version + description: Settings → About + placeholder: e.g. 0.1.14 + validations: + required: true + + - type: dropdown + id: os + attributes: + label: Operating system + options: + - macOS (Apple Silicon) + - macOS (Intel) + - Windows (built from source) + - Linux (built from source) + - Other (say which below) + validations: + required: true + + - type: input + id: os-version + attributes: + label: OS version / distro + placeholder: e.g. macOS 15.2, Ubuntu 24.04 + + - type: dropdown + id: source + attributes: + label: Installed from + options: + - GitHub release (.dmg) + - mydevtools.tech download link + - Built from source + + - type: textarea + id: extra + attributes: + label: Screenshots, logs or anything else + description: If it is visual, a screenshot or short clip helps a lot. When it started, whether it is intermittent, etc. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..243b4f8b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: false +contact_links: + - name: 💬 Question or discussion + url: https://github.com/mydevtools-tech/mydevtools/discussions + about: Ask a question, share a workflow, or discuss an idea before it becomes an issue. + - name: 🔒 Report a security vulnerability + url: https://github.com/mydevtools-tech/mydevtools/security/advisories/new + about: Report privately. Please do not open a public issue for a security problem. + - name: 🆘 Support and troubleshooting + url: https://github.com/mydevtools-tech/mydevtools/blob/main/SUPPORT.md + about: Common questions, what to include in a report, and where to get help. + - name: 🗺️ Roadmap + url: https://github.com/mydevtools-tech/mydevtools/blob/main/ROADMAP.md + about: See what is being worked on now, what is next, and what is not planned. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7d..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..e310937f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,80 @@ +name: ✨ Feature request +description: Suggest a new tool, or an improvement to an existing one +labels: ["enhancement", "needs triage"] +body: + - type: markdown + attributes: + value: | + Worth a look first: + - [ROADMAP.md](https://github.com/mydevtools-tech/mydevtools/blob/main/ROADMAP.md) — it may already be planned, or explicitly not planned. + - [Existing issues](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue) — someone may have asked already; a 👍 counts as a vote. + + - type: checkboxes + id: checks + attributes: + label: Before you start + options: + - label: I searched existing issues and the roadmap and found nothing covering this. + required: true + + - type: dropdown + id: area + attributes: + label: Which part of MyDevTools? + options: + - A new tool + - An existing tool (name it below) + - API client + - Database clients (SQL / MongoDB / Redis / S3) + - App-wide (sidebar, command palette, settings, i18n…) + - Website / docs + validations: + required: true + + - type: textarea + id: problem + attributes: + label: What problem are you trying to solve? + description: Describe the problem, not only the solution you have in mind — the underlying problem often has a simpler answer. + validations: + required: true + + - type: textarea + id: workaround + attributes: + label: What do you do today instead? + description: The current workaround — another app, a script, a website, doing it by hand. + + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like + validations: + required: true + + - type: dropdown + id: frequency + attributes: + label: How often do you hit this? + description: This genuinely affects priority. + options: + - Daily + - Weekly + - Occasionally + validations: + required: true + + - type: checkboxes + id: constraints + attributes: + label: Does it fit the constraints? + description: MyDevTools is offline-first, account-free, has no backend, and is free and open source. Anything requiring a mandatory server, sign-in or paid tier is out of scope. + options: + - label: This works fully offline, or I have explained below exactly what it connects to and why. + required: true + + - type: textarea + id: extra + attributes: + label: Alternatives considered / additional context + description: Other approaches, tools that already do this well, screenshots, links. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..17ad4766 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,51 @@ + + +## What does this change? + + + +Closes # + +## Why? + + + +## Type of change + +- [ ] Bug fix +- [ ] New tool +- [ ] Improvement to an existing tool +- [ ] Documentation +- [ ] Translation +- [ ] Chore (deps, config, tooling) + +## How did you verify it? + + + +## Screenshots + + + +## Checklist + +- [ ] `pnpm lint` passes +- [ ] Tests pass (`cd apps/desktop-ui && pnpm test`), and logic changes have a test +- [ ] User-visible strings go through `useTranslations("")` — nothing hardcoded +- [ ] New/changed keys added to `messages/en.json`, then `pnpm i18n:sync` run +- [ ] Async mutations that can fail are wrapped in `try/catch` with `toast.error(message)` +- [ ] No new mandatory network call, sign-in, sync or backend — the app still works fully offline +- [ ] No secrets, tokens or personal data in the diff + +### New tool only + +- [ ] Registered in all six registries (`metadata.ts`, `route-config.ts`, `tab-registry.tsx`, `tool-categories.ts`, `tool-i18n.ts`, `sidebar-data.ts`) +- [ ] Logic lives in `src/lib/.ts` with a test in `src/lib/__tests__/` +- [ ] Uses `ToolPageHeader` with the category accent, like the other tools + +## Anything reviewers should know? + + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..c05bea1e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,27 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + groups: + actions: + patterns: ["*"] + + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 + groups: + minor-and-patch: + update-types: ["minor", "patch"] + + - package-ecosystem: cargo + directory: /apps/desktop/src-tauri + schedule: + interval: weekly + open-pull-requests-limit: 5 + groups: + minor-and-patch: + update-types: ["minor", "patch"] diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 00000000..a865710c --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,99 @@ +# Issue and PR labels for MyDevTools. +# +# Apply with the GitHub CLI (creates missing labels, updates existing ones): +# +# gh label create "" --color "" --description "" --force +# +# Or use a label-sync action pointed at this file. Nothing reads it automatically — +# it exists so the label set is reviewable in the repo instead of living only in +# the GitHub UI. + +# ─── Type ──────────────────────────────────────────────────────────────────── + +- name: bug + color: "d73a4a" + description: Something is broken or behaves unexpectedly + +- name: enhancement + color: "a2eeef" + description: Improvement to something that already exists + +- name: feature + color: "0e8a16" + description: A new tool or capability + +- name: documentation + color: "0075ca" + description: README, contributor docs, tool descriptions, website copy + +- name: translation + color: "5319e7" + description: Locale files and translation quality across the 27 languages + +- name: chore + color: "fef2c0" + description: Dependencies, config, build and tooling + +# ─── Area ──────────────────────────────────────────────────────────────────── + +- name: "area: api-client" + color: "1d76db" + description: The API client — requests, collections, environments, mock server + +- name: "area: database" + color: "1d76db" + description: SQL, MongoDB, Redis and S3 clients + +- name: "area: desktop-shell" + color: "1d76db" + description: The Tauri/Rust shell — storage, drivers, IPC, packaging + +- name: "area: website" + color: "1d76db" + description: mydevtools.tech (apps/web) + +# ─── Priority and state ────────────────────────────────────────────────────── + +- name: security + color: "b60205" + description: Security-relevant issue (public ones only — vulnerabilities go through a private advisory) + +- name: performance + color: "fbca04" + description: Speed, memory or responsiveness + +- name: ux + color: "c5def5" + description: Usability, flow and interaction design + +- name: accessibility + color: "c5def5" + description: Keyboard navigation, screen readers, focus, contrast + +- name: good first issue + color: "7057ff" + description: Well-scoped and approachable for a first contribution + +- name: help wanted + color: "008672" + description: Maintainers would welcome someone picking this up + +- name: needs triage + color: "ededed" + description: Not yet reviewed by a maintainer + +- name: needs reproduction + color: "ededed" + description: Cannot be reproduced yet — more detail needed from the reporter + +- name: blocked + color: "000000" + description: Waiting on something else before it can proceed + +- name: wontfix + color: "ffffff" + description: Out of scope, or conflicts with the offline/no-account/free constraints + +- name: duplicate + color: "cfd3d7" + description: Already tracked elsewhere diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f5d956ab --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +name: CI + +# Typecheck + unit tests for the Next.js apps. Lint is deliberately not here yet: +# the tree has a large pre-existing eslint backlog; it joins CI once that is +# cleared so the badge means something. + +on: + push: + branches: [main] + paths: + - "apps/desktop-ui/**" + - "apps/web/**" + - "package.json" + - "pnpm-lock.yaml" + - "pnpm-workspace.yaml" + - "patches/**" + - ".nvmrc" + - ".github/workflows/ci.yml" + pull_request: + paths: + - "apps/desktop-ui/**" + - "apps/web/**" + - "package.json" + - "pnpm-lock.yaml" + - "pnpm-workspace.yaml" + - "patches/**" + - ".nvmrc" + - ".github/workflows/ci.yml" + +permissions: + contents: read + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + web: + name: typecheck + test + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + + - name: Install pnpm + uses: pnpm/action-setup@v4 + # version intentionally omitted — taken from package.json "packageManager" + + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: .nvmrc + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Typecheck desktop-ui + run: pnpm --filter @mydevtools/desktop-ui exec tsc --noEmit + + - name: Typecheck web + run: pnpm --filter @mydevtools/web exec tsc --noEmit + + - name: Unit tests (desktop-ui) + run: pnpm --filter @mydevtools/desktop-ui exec jest --ci diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 170f1c21..e2cdf5a5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,9 +49,8 @@ jobs: - name: Set up Node uses: actions/setup-node@v4 with: - node-version: 22 - # no 'cache: pnpm' — pnpm-lock.yaml is gitignored in this repo, so it - # isn't present on the runner for the cache action to hash. + node-version-file: .nvmrc + cache: pnpm - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -64,7 +63,7 @@ jobs: workspaces: apps/desktop/src-tauri -> target - name: Install frontend dependencies - run: pnpm install + run: pnpm install --frozen-lockfile - name: Build and release uses: tauri-apps/tauri-action@v0 @@ -94,13 +93,14 @@ jobs: updaterJsonPath: latest.json updaterJsonKeepUniversal: true - # The source repo is private, so its release assets 404 for the public. - # Mirror the built artifacts to a PUBLIC releases repo that the updater - # endpoint and the website download button point at. + # Historical: this repo used to be private, so artifacts were mirrored to a + # public releases repo. The repo is public now and both the updater endpoint + # (tauri.conf.json) and the website download button point at this repo's + # releases; the mirror is kept only for older installs that still poll it. - name: Mirror release to public repo env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # read the private release - RELEASES_TOKEN: ${{ secrets.RELEASES_TOKEN }} # write to the public repo + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # read this repo's release + RELEASES_TOKEN: ${{ secrets.RELEASES_TOKEN }} # write to the mirror repo PUBLIC_REPO: mydevtools-tech/mydevtools-releases run: | set -euo pipefail @@ -111,7 +111,7 @@ jobs: TARGZ="$(ls "$BUNDLE"/macos/*.app.tar.gz)" SIG="$(ls "$BUNDLE"/macos/*.app.tar.gz.sig)" - # Pull tauri's generated latest.json from the private release. + # Pull tauri's generated latest.json from this repo's release. # threatcrush-disable-next-line secret-generic-credential GH_TOKEN="$GITHUB_TOKEN" gh release download "$TAG" \ --repo "$GITHUB_REPOSITORY" --pattern latest.json --dir . --clobber diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 00000000..3e98aabc --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,66 @@ +name: Rust + +# cargo test for the Tauri shell. Runs on Linux to keep Actions minutes cheap; +# the shell has no platform-specific code paths. The release build (macOS) is +# a separate workflow. + +on: + push: + branches: [main] + paths: + - "apps/desktop/src-tauri/**" + - ".github/workflows/rust.yml" + pull_request: + paths: + - "apps/desktop/src-tauri/**" + - ".github/workflows/rust.yml" + +permissions: + contents: read + +concurrency: + group: rust-${{ github.ref }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: 0 + +jobs: + test: + name: cargo test + runs-on: ubuntu-latest + timeout-minutes: 45 + defaults: + run: + working-directory: apps/desktop/src-tauri + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + + - name: Tauri Linux prerequisites + # Short per-request timeouts + retries: the runner's apt mirror occasionally + # stalls for the whole job; fail fast and retry instead of hanging for 45 min. + timeout-minutes: 10 + env: + DEBIAN_FRONTEND: noninteractive + APT_OPTS: -o Acquire::http::Timeout=20 -o Acquire::https::Timeout=20 -o Acquire::Retries=3 + run: | + for i in 1 2 3; do sudo apt-get update $APT_OPTS && break || sleep 10; done + sudo apt-get install -y --no-install-recommends $APT_OPTS \ + libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev \ + libssl-dev libayatana-appindicator3-dev librsvg2-dev + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: apps/desktop/src-tauri -> target + + # SQLCipher + OpenSSL are vendored (rusqlite bundled-sqlcipher-vendored-openssl), + # so the first run compiles them; rust-cache makes later runs fast. + - name: cargo test + run: cargo test --locked diff --git a/.gitignore b/.gitignore index 58a0ff83..b4a1f0d5 100644 --- a/.gitignore +++ b/.gitignore @@ -78,7 +78,8 @@ apps/web/.codex apps/desktop/src-tauri/target/debug/* apps/desktop/src-tauri/target/release/ .claude -/docs +# Internal design notes stay local; docs/ itself (README translations, ARCHITECTURE.md) is public. +docs/superpowers/ .superpowers/apps/desktop/node_modules /apps/desktop/src-tauri/target diff --git a/CLAUDE.md b/CLAUDE.md index b6f5893f..73aad915 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # MyDevTools — Claude Code instructions -All-in-one developer toolkit (~80 tools: formatters, security, generators, notes, bookmarks, tasks, API client…). Full product doc: `docs/MYDEVTOOLS.md`. +All-in-one developer toolkit (80+ tools: formatters, security, generators, notes, bookmarks, tasks, API client…). Architecture doc: `docs/ARCHITECTURE.md`. Public tool count everywhere is "80+" (never a precise number — registries drift). `docs/` is public (README translations in `docs/readme/`); only `docs/superpowers/` is gitignored. Maintainer-only punch lists live in `.claude/`. ## Product model (current direction — do not regress) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..c2cc081e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,139 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official email address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +For MyDevTools, community spaces include the GitHub repository — issues, pull +requests, discussions and code review — and any official project channels. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement by opening a +[private security advisory](https://github.com/mydevtools-tech/mydevtools/security/advisories/new) +(it is a private channel to the maintainers, and works for conduct reports too) +or by contacting the maintainer directly through their +[GitHub profile](https://github.com/itsmeakhil). + +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][mozilla]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][faq]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[mozilla]: https://github.com/mozilla/diversity +[faq]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..71ccf2e2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,380 @@ +# Contributing to MyDevTools + +Thanks for taking the time to contribute. MyDevTools is a free, open-source +offline developer workstation, and it gets better every time someone fixes a +bug, adds a tool, tightens a translation or clarifies a doc. + +This guide describes how the repository actually works, so you can get from +clone to pull request without guessing. + +--- + +## Table of contents + +- [Project overview](#project-overview) +- [Prerequisites](#prerequisites) +- [Local setup](#local-setup) +- [Development commands](#development-commands) +- [Project structure](#project-structure) +- [Testing](#testing) +- [Linting and formatting](#linting-and-formatting) +- [Branch naming](#branch-naming) +- [Commit guidance](#commit-guidance) +- [Pull request process](#pull-request-process) +- [Adding a new tool](#adding-a-new-tool) +- [Translations](#translations) +- [Improving documentation](#improving-documentation) +- [Reporting bugs](#reporting-bugs) +- [Requesting features](#requesting-features) +- [Good first issues](#good-first-issues) + +--- + +## Project overview + +MyDevTools is a **desktop application**. The desktop app is the product: it runs +offline, has no accounts, and has no MyDevTools backend. Please keep that intact +— changes that introduce mandatory sign-in, cloud sync or a required server will +not be merged. + +The monorepo holds three workspaces: + +| Workspace | Role | +|---|---| +| `apps/desktop-ui` | The Next.js UI the desktop app is built from. **Tool work happens here.** | +| `apps/desktop` | The Tauri v2 (Rust) shell — SQLCipher storage, native database drivers, HTTP/gRPC | +| `apps/web` | mydevtools.tech — the marketing and SEO site. No tools run here. | + +Data flows from the UI through `lib/backend-api.ts` → the Tauri `local_api` +command → SQLCipher on disk. The `/api/v1/...` paths you will see are the local +Rust router's contract; they are never real HTTP requests. + +--- + +## Prerequisites + +- **Node.js** ≥ 22 (the repo pins a version in `.nvmrc` — `nvm use` picks it up) +- **pnpm** ≥ 9 +- **Rust** stable — only needed if you touch `apps/desktop` or want to run the + real desktop shell. Install via [rustup](https://rustup.rs/). + +Contributing to a tool's UI or logic does not require Rust. + +--- + +## Local setup + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +``` + +There is no configuration step — no `.env` to fill in, no API keys, no accounts, +no services to provision. + +--- + +## Development commands + +Run these from the repository root: + +| Command | What it does | +|---|---| +| `pnpm dev:desktop` | Run the full Tauri desktop app (needs Rust) | +| `pnpm build:desktop` | Build the desktop app | +| `pnpm dev` | Run the marketing site at [localhost:3000](http://localhost:3000) | +| `pnpm build` | Build every workspace | +| `pnpm lint` | Lint every workspace | +| `pnpm i18n:audit` | Report missing/extra translation keys | +| `pnpm i18n:sync` | Fill missing translation keys across locales | +| `pnpm clean-install` | Wipe `node_modules` everywhere and reinstall | + +Working on a tool's UI without Rust? Run the desktop UI on its own: + +```bash +cd apps/desktop-ui +pnpm dev:tauri # Next.js dev server with NEXT_PUBLIC_TAURI=1 +``` + +Some features (database drivers, the request proxy, SQLCipher storage) only work +inside the real Tauri shell, so use `pnpm dev:desktop` when you need them. + +--- + +## Project structure + +``` +apps/ +├── desktop/ Tauri v2 shell (Rust) +│ └── src-tauri/src/ +│ ├── router/ Local API over SQLCipher +│ ├── dbtools/ Native Postgres / MySQL / MongoDB / Redis drivers +│ ├── http/ Request proxy, gRPC, mock server +│ └── db/ Schema migrations, device key +│ +├── desktop-ui/ Next.js UI the desktop app is built from +│ ├── src/app/app// One folder per tool: page.tsx + layout.tsx +│ ├── src/components// That tool's components +│ ├── src/lib/.ts Pure tool logic — unit tested, no React +│ ├── src/lib/__tests__/ Jest tests +│ └── messages/ next-intl locale files (27 languages) +│ +└── web/ Marketing and SEO site + └── src/lib/seo/ Platform, comparison and structured-data pages +``` + +The important convention: **keep tool logic pure**. Parsing, formatting, +encoding and validation belong in `src/lib/.ts` as plain functions that a +test can call. The React component wires that logic to inputs and outputs. This +is what makes tools testable without a browser. + +--- + +## Testing + +Tests live in `apps/desktop-ui/src/lib/__tests__/` and run with Jest: + +```bash +cd apps/desktop-ui +pnpm test # everything +pnpm test -- json-formatter # one file +pnpm test:watch # watch mode +``` + +Rust: + +```bash +cd apps/desktop/src-tauri +cargo check +cargo test +``` + +**A new tool needs a test for its logic module.** It does not need a rendering +test — cover the parsing/conversion/edge cases in `src/lib/.ts` and you +have covered the part that breaks. + +> One suite fails on a clean checkout — the `react-window` tests, because that +> package is not installed. That failure is pre-existing and not caused by your +> change. + +--- + +## Linting and formatting + +```bash +pnpm lint # every workspace +cd apps/desktop-ui && pnpm lint # just the app +``` + +Type checking uses the workspace-local TypeScript: + +```bash +cd apps/desktop-ui && ./node_modules/.bin/tsc --noEmit +``` + +Match the style of the file you are editing rather than reformatting it. Please +do not add a formatter config or run a repo-wide reformat in a feature PR — a +diff full of whitespace hides the actual change. + +--- + +## Branch naming + +``` +feature/ new tool or capability +fix/ bug fix +docs/ documentation only +chore/ deps, config, tooling +``` + +Example: `feature/yaml-schema-validator`, `fix/jwt-decoder-expiry-timezone`. + +--- + +## Commit guidance + +- One logical change per commit; keep unrelated refactors out of it. +- Write the subject in the imperative mood: `Add YAML schema validator`, not + `Added...`. +- Explain *why* in the body when the reason is not obvious from the diff. +- Conventional Commit prefixes (`feat:`, `fix:`, `docs:`) are welcome but not + required. + +--- + +## Pull request process + +1. Fork the repo and branch from `main`. +2. Make your change, with a test if you touched logic. +3. Run `pnpm lint` and the relevant tests. +4. Open a PR against `main` and fill in the template. +5. Describe what changed and how you verified it. Screenshots or a short clip + help a lot for UI work. + +What reviewers look for: + +- The offline/no-account promise is intact — no new mandatory network calls, + sign-in, sync or backend. +- User-visible strings go through `useTranslations("")`, never + hardcoded. +- Async mutations that can fail (vault locked, no workspace) are wrapped in + `try/catch` with a `toast.error(message)` — never left as an unhandled + rejection. +- New dependencies are justified. A few lines beat a package for small jobs. + +Small, focused PRs get reviewed faster than large ones. If you are planning +something big, open an issue first so we can agree on the approach before you +spend the time. + +--- + +## Adding a new tool + +A tool is more than one page — it has to be registered so it shows up in search, +the sidebar, the dashboard and the metadata. All of this happens in +`apps/desktop-ui`. + +**1. The tool itself** + +``` +src/app/app//page.tsx the route +src/app/app//layout.tsx metadata via generateToolMetadata +src/components//-layout.tsx the UI +src/lib/.ts pure logic +src/lib/__tests__/.test.ts its test +``` + +**2. Register it in all six registries** + +| File | What to add | +|---|---| +| `src/lib/metadata.ts` | Title, description, keywords | +| `src/lib/route-config.ts` | Route entry (lucide icon) | +| `src/lib/tab-registry.tsx` | Tab/window behaviour | +| `src/lib/tool-categories.ts` | Which category it belongs to | +| `src/lib/tool-i18n.ts` | Translation key mapping | +| `src/components/sidebar/data/sidebar-data.ts` | Sidebar entry (@tabler icon) | + +Miss one and the tool will look half-installed — for example present in the +sidebar but missing from search. + +**3. Translations** + +Add `Navigation.`, `Dashboard.tools.` and a top-level `` +block to `messages/en.json`, then run `pnpm i18n:sync` to propagate the keys and +`pnpm i18n:audit` to confirm nothing is missing. See +[Translations](#translations) below. + +**4. UI conventions** + +Use `ToolPageHeader` with `RevealItem` and `CATEGORY_ACCENT[category]` so the +header matches every other tool. + +The clearest guide is an existing tool — copy the shape of one close to what you +are building. `CLAUDE.md` in the repo root documents these conventions in +condensed form. + +--- + +## Translations + +The app ships in 27 languages. English (`messages/en.json`) is the source of +truth; every other locale mirrors its keys. + +```bash +pnpm i18n:sync # add missing keys to every locale +pnpm i18n:audit # report missing or orphaned keys +``` + +Two things to watch: + +- **Preserve ICU plural forms.** Russian, Ukrainian, Polish and Czech need + `few`/`many`; Arabic needs the full set (`zero`/`one`/`two`/`few`/`many`/`other`). +- **Avoid ``-shaped text in strings read with a plain `t()`** — next-intl + treats it as markup and the call fails client-side. Use tag-free strings, or + `t.rich` when you genuinely need markup. + +Improving an existing translation is one of the most useful small contributions +available, and needs no Rust and no build. + +### README translations + +`README.md` (English) is canonical. Translated copies live in +`docs/readme/readme_.md` using the same locale codes as `messages/` +(`zh`, `ja`, `ko`, `es`, `pt-BR`, `de`, `fr`, `hi`). They are deliberately +shorter than the English README — keep the hero, install, privacy, tool +categories, contributing and license sections; skip the full per-tool tables. + +- Fixing wording in an existing translation: edit the file, open a PR. +- Adding a language: copy `docs/readme/readme_es.md`, translate, add the new + language to the language bar at the top of `README.md` **and** of every file in + `docs/readme/`. Use the tool names from `messages/.json` + (`Navigation.*`, `Dashboard.tools.*`) so the README matches the app. + +--- + +## Improving documentation + +Docs live in: + +- `README.md` — the front door +- `docs/readme/readme_.md` — translated READMEs (zh, ja, ko, es, pt-BR, de, fr, hi); English is canonical, translations may lag +- `docs/ARCHITECTURE.md` — how the shell, router, storage and UI fit together +- `apps/web/src/lib/metadata.ts` — per-tool descriptions used on the website +- Tool descriptions in `src/components/sidebar/data/sidebar-data.ts` + +Doc PRs are as welcome as code PRs. If a tool description is vague or a setup +step did not work for you, fixing it helps the next person hitting the same wall. + +--- + +## Reporting bugs + +Open a [bug report](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) +and include: + +- What you did, what you expected, what happened instead +- Your OS and app version (Settings → About) +- The tool involved +- A screenshot or clip if it is visual + +**Please do not paste real secrets, tokens or production connection strings** +into an issue. Redact them, or reproduce with dummy data. + +Found a security vulnerability? Do not open a public issue — follow +[SECURITY.md](SECURITY.md) instead. + +--- + +## Requesting features + +Open a [feature request](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) +describing the problem you are trying to solve, not only the solution you have +in mind — the underlying problem often has a simpler answer. + +Useful things to include: what you do today as a workaround, how often you hit +this, and whether it fits an offline, local-first, account-free app. + +--- + +## Good first issues + +New here? Issues labelled +[`good first issue`](https://github.com/mydevtools-tech/mydevtools/labels/good%20first%20issue) +are scoped to be completable without deep knowledge of the codebase. If none are +open, improving a translation, a tool description or a README translation is +always welcome — and testing the desktop build on Windows or Linux is the most +useful thing a new contributor can do right now. + +--- + +## Code of conduct + +Participation is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). Be +decent to each other. + +## License + +MyDevTools is licensed under the [GNU AGPL v3](LICENSE). By contributing, you +agree that your contributions are licensed under the same terms. diff --git a/README.md b/README.md index 51d261f0..90d2fc42 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,73 @@

- MyDevTools Logo + + + MyDevTools logo +

-

MyDevTools.tech

+

MyDevTools

- 80+ developer tools in one desktop app.
- Completely offline. No account required. Free for everyone.
+ The Offline Developer Workstation

- ⬇️ Download • - ✨ Tools • - 🏗️ Stack • - 🚀 Get Started • - 🤝 Contribute + 80+ developer tools, an API client, SQL / MongoDB / Redis clients, encryption
+ and productivity utilities — all running locally on your machine.

- Next.js - React - TypeScript - Tauri - Rust - SQLCipher - License + Free · Open Source · Offline · No Account · No Ads

- 100% Offline - No account required - Free for everyone + Latest release + CI + Rust + Downloads + License AGPL-3.0 + GitHub stars

+

+ Tauri 2 + Rust + Next.js 16 + React 19 + TypeScript 5.7 + SQLCipher +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ Download • + 🌐 Website • + 📚 Docs • + 🧰 Tools • + 📋 Changelog • + 🗺️ Roadmap • + 🤝 Contribute • + 💬 Discussions +

+ + +

MyDevTools on Product Hunt @@ -41,236 +76,327 @@ --- -## 🔥 Why MyDevTools? +## What is MyDevTools? + +MyDevTools is a **desktop application** that replaces the pile of tabs, one-off +websites and single-purpose apps a developer opens every day. Formatters, +converters, generators, crypto utilities, an API client, SQL / MongoDB / Redis +clients, notes, snippets and a credential vault — one app, one search box, one +keyboard shortcut. -Most developer tools are scattered across dozens of tabs, riddled with ads, gated behind a sign-up, or quietly sending your data to someone else's server. **MyDevTools** changes that: +It runs on your machine. There is no MyDevTools server, no account and no sync. -- 🔌 **Completely offline** — A desktop app with no backend behind it. The app itself never needs a network: your data is processed and stored on your machine. Only tools you deliberately point at something remote (API client, database clients, DNS/WHOIS lookups) reach out, and only to the destination you choose. -- 🙅 **No account required** — No sign-up, no sign-in, no activation, no license key. Install it, open it, start working. -- 💯 **Free for everyone** — Every tool and every feature. No paid tier, no trial, no seat limits, no upsell. -- 🔒 **Privacy by design** — Nothing to harvest, because there is nowhere to send it. Credentials live in an AES-256 vault encrypted with a password only you know. -- 📖 **Open source** — Licensed under **GNU AGPLv3**. Read it, build it, fork it. See [LICENSE](LICENSE). -- 🎨 **Premium UI/UX** — Dark/light mode, silky animations, 27 languages. +| The usual setup | MyDevTools | +|---|---| +| A dozen tabs of single-purpose tool sites | One desktop app, `⌘K` to jump anywhere | +| Tools that upload your payload to a server to format it | Processing happens on your machine | +| Sign-up walls and license keys | No account, no sign-in, no activation | +| Separate apps for SQL, MongoDB and Redis | SQL + MongoDB + Redis + S3 in one place | +| Paid tiers for basic utilities | Free — every tool, every feature | +| Closed-source tooling you cannot audit | AGPL-3.0, the whole app is in this repo | + +> **Note on the table above:** it describes the workflow MyDevTools replaces, not +> any specific competing product. Feature parity with dedicated tools like +> DBeaver or Postman is not claimed — see [Where MyDevTools stops](#where-mydevtools-stops). --- -## ✨ Tools & Features +## 📦 Install + +| Platform | How | +|---|---| +| **macOS** (Apple Silicon + Intel) | [Download the latest `.dmg`](https://github.com/mydevtools-tech/mydevtools/releases/latest) — universal build, signed and notarized, updates itself in-app | +| **Windows / Linux** | Not published yet. The Tauri shell builds on both — see [Building from source](#%EF%B8%8F-building-from-source) and the [roadmap](ROADMAP.md). Testing on these platforms is a great first contribution | + +Open it and start working: no sign-up, no configuration, no API keys. + +--- + +## 🧰 Tools + +80+ tools ship in the app today, grouped the way the sidebar groups them. + +### 📝 Formatters & validators + +| Tool | Description | +|---|---| +| **JSON Formatter** | Format, validate and edit JSON in a Monaco editor | +| **JSON Visualizer** | Explore JSON as an interactive node graph with search and image export | +| **JSON Diff** | Compare two JSON documents semantically, ignoring key order and formatting | +| **JSON Schema Generator** | Infer JSON Schema from a sample payload | +| **JSON to Code** | Generate TypeScript, Go, Rust, Python, Java, Kotlin and Swift models from JSON | +| **JSONPath Playground** | Query JSON with JSONPath or JMESPath expressions | +| **YAML Formatter** | Format, validate and convert YAML to JSON | +| **Format Converter** | Convert between JSON, YAML, TOML and XML in any direction | +| **Beautify & Minify** | Beautify or minify HTML, CSS, JavaScript, XML and JSON | +| **SQL Formatter** | Format SQL for MySQL, PostgreSQL and SQLite | +| **GraphQL Formatter** | Format GraphQL with syntax highlighting and a query builder | +| **Markdown Preview** | Live Markdown renderer with HTML export and HTML → Markdown | +| **Diff Checker** | Side-by-side line diff of two texts | +| **Regex Tester** | Test regex with live match highlighting and capture groups | + +### 🌐 Network & API + +| Tool | Description | +|---|---| +| **API Client** | Build, send and debug HTTP requests — collections, environments, auth, gRPC and a mock server. Not bound by browser CORS | +| **cURL to Code** | Turn a curl command into fetch, axios, Python, Go, PHP, Ruby, Java or C# | +| **Webhook Tester** | Capture and inspect incoming webhook requests in real time | +| **WebSocket Tester** | Connect to WebSocket endpoints and send, receive and inspect messages live | +| **DNS Lookup** | Query A, AAAA, MX, TXT, NS, CNAME, SOA, CAA and PTR records | +| **Whois Lookup** | Domain and IP registration details via RDAP/WHOIS | +| **IP / Subnet Calculator** | IPv4 and IPv6 CIDR: netmask, host range, address counts | +| **HTTP Status Codes** | Searchable reference for 1xx–5xx | +| **User-Agent Parser** | Browser, OS and device details from a user-agent string | +| **MIME Type Lookup** | MIME type for a file extension or filename | + + + +### 🗄️ Database & storage clients + +| Tool | Description | +|---|---| +| **SQL Client** | Connect to PostgreSQL, MySQL and MariaDB, run queries, browse schemas — credentials in an encrypted store | +| **Database Explorer** | Browse MongoDB databases, collections and documents | +| **Redis Commander** | Browse keys, inspect values, run raw commands and flush patterns | +| **S3 Drive** | Manage AWS S3 and DigitalOcean Spaces buckets — browse, upload, delete | + +Database drivers are **native Rust clients** in the Tauri shell, so connections +go straight from your machine to your database. + + + +### 🔐 Security & crypto + +| Tool | Description | +|---|---| +| **Password Manager** | Credential vault encrypted with a password only you know | +| **Encryption Playground** | AES-GCM with a raw key or passphrase; encrypt/decrypt JSON bundles | +| **JWT Decoder** | Decode JWT header, payload and expiry | +| **Hash Generator** | MD5, SHA-1, SHA-256/384/512 digests for text or files | +| **HMAC Generator** | HMAC-SHA1/256/384/512 for webhook and API signing tests | +| **Bcrypt Generator & Checker** | Hash passwords with bcrypt and verify hashes | +| **TOTP / 2FA Generator** | Six-digit codes from a Base32 authenticator secret | +| **SSH / RSA Key Generator** | Ed25519 or RSA key pairs in OpenSSH and PEM formats | +| **Certificate / PEM Decoder** | X.509 certificates and CSRs: subject, issuer, validity, SANs | +| **Environment Manager** | Encrypted `.env` sets per project and environment | +| **Secret / API Key Generator** | Cryptographically random strings with configurable alphabet | +| **Email Validator** | Verify and validate email addresses | + +### 🔄 Converters + +| Tool | Description | +|---|---| +| **Base64 Encoder** | Encode and decode Base64 | +| **Image to Base64** | Images to Data URI or raw Base64 | +| **URL Encoder** · **URL Parser** | Percent-encode/decode, and split a URL into its parts | +| **Escape / Encode** | HTML entities, backslash strings, hex ↔ ASCII, Unicode `\uXXXX` | +| **String Case Converter** | camelCase, snake_case, kebab-case, CONSTANT_CASE and more | +| **String Inspector** | Characters, words, bytes, invisible and non-ASCII code points | +| **Line Sort & Dedupe** | Sort, deduplicate, trim and clean up lists | +| **CSV / Excel ↔ JSON** | Convert spreadsheets to JSON and back | +| **Number Base Converter** | Integers between bases 2–36 | +| **Timestamp Converter** · **Timezone Converter** | Unix/ISO/relative time, and time across timezones | +| **Unit Converter** | 323 units across 43 categories | +| **Chmod Calculator** | Unix permissions between checkboxes, octal and symbolic | +| **LLM Token Counter** | Count tokens and estimate API cost for any text | + +### ⚙️ Generators -### 🧰 Developer Utilities +| Tool | Description | +|---|---| +| **UUID / ULID** | Generate UUIDs and ULIDs with bulk export | +| **Mock Data Generator** | Define a schema, export random JSON, CSV, SQL or XML | +| **Cron Builder** | Visual cron builder, presets and parser | +| **Docker Compose Generator** | Compose local stacks — Postgres, Redis, NGINX, Kafka and more | +| **.gitignore Generator** | Merged `.gitignore` files from 500+ stacks | +| **QR Code Generator** | PNG QR codes from text or URLs | +| **Markdown Table Generator** | Build Markdown and HTML tables in a spreadsheet-like editor | +| **Lorem Ipsum** | Placeholder text for layouts and mockups | + +### 🎨 Media & design | Tool | Description | -|------|-------------| -| **📡 API Client** | Test & debug REST APIs with a Postman-like interface — headers, query params, body, response inspector | -| **🔤 Base64** | Encode and decode Base64 strings with one click | -| **✨ Beautify & Minify** | Beautify or minify HTML, CSS, JavaScript, XML, and JSON in one tool with a language dropdown | -| **🔏 Certificate PEM Decoder** | Decode and inspect SSL/TLS certificates from PEM format | -| **🎨 Color Picker** | Pick, convert, and preview colors across HEX, RGB, HSL formats and more | -| **♿ Contrast Checker** | Check foreground/background color contrast ratios for WCAG accessibility compliance | -| **⏰ Cron Builder** | Build and validate cron expressions visually with human-readable output | -| **📊 CSV / Excel / JSON Converter** | Convert between CSV, Excel, and JSON data formats | -| **📡 cURL to Code** | Convert a curl command into ready-to-run request code for fetch, axios, Python, Go, PHP, Ruby, Java, and C# | -| **🔀 Diff Checker** | Side-by-side text diff viewer with inline change highlighting | -| **🐳 Docker Compose Generator** | Generate `docker-compose.yml` files visually for common service stacks | -| **📧 Email Validator** | Validate email address format and DNS structure instantly | -| **🔐 Encryption Playground** | Encrypt and decrypt data with common algorithms (AES, RSA, etc.) | -| **🌿 Environment Manager** | Manage `.env` files — import, export, diff environments, keep secrets organized | -| **🔣 Escape / Encode** | Escape and unescape HTML entities, backslash (JS/JSON) strings, hex ↔ ASCII, and Unicode \uXXXX sequences | -| **🔄 Format Converter** | Convert between data formats like YAML, TOML, JSON, XML, and more | -| **📊 GraphQL Formatter** | Format and prettify GraphQL queries and schemas | -| **#️⃣ Hash Generator** | Generate MD5, SHA-1, SHA-256, SHA-512, and other hashes from any input | -| **🔑 HMAC Generator** | Generate HMAC signatures with configurable keys and hash algorithms | -| **📖 HTTP Status Codes** | Quick reference for all HTTP status codes with descriptions | -| **🖼️ Image Compressor** | Compress images client-side with quality control and format output | -| **🖼️ Image to Base64** | Convert images to Data URI or raw Base64 strings with a visual dropzone | -| **🌐 IP Subnet Calculator** | Calculate subnets, CIDR ranges, broadcast addresses, and host counts | -| **📝 JSON Formatter** | Beautify, validate, minify, and explore JSON with Monaco Editor | -| **📐 JSON Schema Generator** | Auto-generate JSON Schema from any JSON input instantly | -| **🧩 JSON to Code** | Generate typed models — TypeScript, Go, Rust, Python, Java, Kotlin, Swift, and JSON Schema — from a sample JSON payload | -| **🙈 .gitignore Generator** | Generate merged .gitignore files instantly from 500+ tech stacks | -| **🔑 JWT Decoder** | Decode and inspect JWT tokens — header, payload, and signature at a glance | -| **📑 Line Sort & Dedupe** | Sort lines alphabetically or by length, remove duplicates, trim whitespace, and clean up lists locally | -| **📋 Lorem Ipsum Generator** | Generate placeholder text in paragraphs, words, or sentences | -| **📝 Markdown Preview** | Write Markdown and preview rendered HTML output side-by-side | -| **📂 MIME Type Lookup** | Look up MIME types by file extension or content type string | -| **🎲 Mock Data Generator** | Generate realistic fake data (names, emails, addresses, etc.) in bulk | -| **🔢 Number Base Converter** | Convert numbers between binary, octal, decimal, and hexadecimal | -| **🗄️ NoSQL Explorer** | Connect to MongoDB, browse databases & collections, and run queries with a visual data viewer | -| **🧬 Regex Tester** | Test regular expressions in real time with match highlighting and capture group breakdown | -| **📱 QR Code Generator** | Generate QR codes from URLs, text, or custom data | -| **🔑 Secret / API Key Generator** | Generate cryptographically secure API keys and secrets | -| **💾 Snippet Manager** | Save, organize, and search code snippets with syntax highlighting | -| **🛢️ SQL Client** | Connect to SQL databases and run queries with a visual interface | -| **🛢️ SQL Formatter** | Format and prettify SQL queries with dialect support | -| **🔡 String Case Converter** | Convert text between camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, and more | -| **🔎 String Inspector** | Count characters, words, lines, and bytes, and reveal invisible or non-ASCII characters with their Unicode code points | -| **🖌️ SVG Optimizer** | Optimize and minify SVG files while preserving visual output | -| **⏱️ Timestamp Converter** | Convert Unix timestamps to human-readable dates and vice versa | -| **🔐 TOTP Generator** | Generate time-based one-time passwords (TOTP/2FA codes) | -| **📏 Unit Converter** | Convert between units of length, weight, temperature, area, and more | -| **🌐 URL Encoder/Decoder** | Encode and decode URL components instantly | -| **🔍 URL Parser** | Parse and inspect URL components — protocol, host, path, query, fragment | -| **🕵️ User Agent Parser** | Parse and decode browser user agent strings | -| **🔢 UUID Generator** | Generate UUIDs (v1, v4) in bulk with copy support | -| **🎨 CSS Gradient Builder** | Visual builder for linear and radial CSS gradients with color stops | - -### 📱 Productivity Apps +|---|---| +| **Color Picker** · **Contrast Checker** | HEX/RGB/HSL conversion, and WCAG 2.1 AA/AAA ratios | +| **CSS Gradient Builder** · **CSS Generators** | Gradients, box-shadow, border-radius and fluid `clamp()` | +| **Image Compressor** | Compress JPEG, PNG and WebP with a quality slider | +| **SVG Optimizer** | Strip junk with SVGO and see the size reduction | +| **EXIF Viewer & Remover** | Inspect and strip photo metadata | +| **Favicon Generator** | Favicons, app icons and manifest snippets | +| **Code Screenshot** | Turn source code into shareable images | +| **Keycode Inspector** | Inspect JavaScript keyboard events: key, code, modifiers | + +### 📱 Productivity | Tool | Description | -|------|-------------| -| **🔖 Bookmarks** | Save, organize, and manage your favorite links in one central place | -| **🎮 Break Room** | Quick games and activities to recharge during work breaks | -| **📓 Notes** | Rich-text note-taking powered by Tiptap — headings, lists, code blocks, images & more | -| **🔐 Password Manager** | Store credentials securely with client-side encryption. Your vault, your keys | -| **✅ Task Manager** | Organize tasks with priorities, statuses, and drag-and-drop reordering | +|---|---| +| **Notes** | Rich-text notes powered by Tiptap — headings, lists, code blocks, images | +| **Code Snippets** | Save snippets with syntax highlighting and auto language detection | +| **Tasks** | To-do lists with priorities, statuses and drag-and-drop | +| **Bookmarks** | Organize links in one place | +| **API Keys** | Encrypted API keys and secrets per environment (dev / staging / prod) | +| **Break Room** | 2048, Sudoku, Snake, Minesweeper, Tetris | + +Everything is searchable from one command palette, in dark or light mode, in 27 +languages. + + --- -## 🏗️ Tech Stack +## 🔒 Privacy by design + +MyDevTools Desktop is built to work locally. Your developer data stays on your +machine instead of being posted to someone else's tool backend. + +- **No MyDevTools server.** There is no backend to sign in to, no sync service + and no account system. Tool input, notes, snippets, tasks and bookmarks are + written to a local SQLCipher database, encrypted with a key held in the OS + keychain. +- **Credentials are vault-encrypted.** Database passwords, API keys and password + manager entries are encrypted locally with a master password only you know. +- **You choose every outbound connection.** The app itself needs no network, but + some tools exist to talk to *your* destinations: the API client sends the + requests you write, the database clients connect to the hosts you configure, + DNS/WHOIS lookups query public registries, and the updater checks GitHub + releases. Those are the connections you asked for — nothing else leaves. +- **Optional, anonymous usage stats.** Off unless you switch them on. When on, + two events (`app_started`, `tool_opened`) are sent with a rotating session id, + the app version and the locale. No device id, no paths, nothing typed into a + tool. See [`apps/desktop-ui/src/lib/telemetry.ts`](apps/desktop-ui/src/lib/telemetry.ts). +- **Auditable.** AGPL-3.0. The claims above are in this repo — read them. + +### Desktop vs. website + +| | What it is | +|---|---| +| **MyDevTools Desktop** (this repo, `apps/desktop-ui` + `apps/desktop`) | The product. Runs the 80+ tools locally, offline, with no account and no backend | +| **mydevtools.tech** (`apps/web`) | An informational site: what the app does, tool documentation and the download link. The tools do **not** run there | + +The website is a normal marketing site and uses standard web analytics. Its +privacy properties are not the app's — the app is the offline part. -### Frontend +--- -| Layer | Technology | -|-------|------------| -| **Framework** | [Next.js 16](https://nextjs.org/) — App Router, Turbopack, Server Components | -| **Runtime** | [React 19](https://react.dev/) | -| **Language** | [TypeScript 5.7](https://www.typescriptlang.org/) | -| **Styling** | [Tailwind CSS 3.4](https://tailwindcss.com/) + [Shadcn UI](https://ui.shadcn.com/) + [Radix UI](https://www.radix-ui.com/) | -| **Animations** | [Framer Motion](https://www.framer.com/motion/) + [Motion](https://motion.dev/) | -| **State Management** | [Zustand](https://github.com/pmndrs/zustand) | -| **Code Editors** | [Monaco Editor](https://microsoft.github.io/monaco-editor/) · [Tiptap](https://tiptap.dev/) · [Novel](https://novel.sh/) | -| **Drag & Drop** | [dnd-kit](https://dndkit.com/) | -| **i18n** | [next-intl](https://next-intl-docs.vercel.app/) | -| **Icons** | [Lucide React](https://lucide.dev/) + [Tabler Icons](https://tabler.io/icons) | -| **Notifications** | [Sonner](https://sonner.emilkowal.ski/) | -| **Date Utilities** | [date-fns](https://date-fns.org/) | -| **Analytics** | [Vercel Analytics](https://vercel.com/analytics) + [Speed Insights](https://vercel.com/docs/speed-insights) | - -### Desktop shell +## 🏗️ Architecture + +``` +apps/ +├── desktop/ Tauri v2 shell (Rust) +│ └── src-tauri/src/ +│ ├── router/ Local API over SQLCipher — the /api/v1/... contract, never HTTP +│ ├── dbtools/ Native Postgres / MySQL / MongoDB / Redis drivers +│ ├── http/ Request proxy, gRPC, mock server (no browser CORS limits) +│ └── db/ Schema migrations, device key +│ +├── desktop-ui/ Next.js UI the desktop app is built from — all 80+ tools +│ ├── src/app/app/ Tool pages +│ ├── src/lib/ Tool logic (pure, unit-tested), crypto, local API client +│ └── messages/ next-intl locale files (27 languages) +│ +└── web/ mydevtools.tech — marketing and SEO site +``` | Layer | Technology | -|-------|------------| +|---|---| | **Shell** | [Tauri v2](https://v2.tauri.app/) (Rust) | | **Storage** | [SQLCipher](https://www.zetetic.net/sqlcipher/) via `rusqlite`, keyed from the OS keychain | -| **Database drivers** | Native Rust clients for PostgreSQL, MySQL, MongoDB and Redis (Data Explorer) | -| **HTTP / gRPC** | `reqwest` + `h2`, so the API Client is not bound by browser CORS | - -There is no server. The app has no accounts, no sign-in and no sync: every tool -reads and writes the local encrypted database on your machine. - -### Monorepo Infrastructure +| **Database drivers** | Native Rust clients for PostgreSQL, MySQL, MongoDB and Redis | +| **HTTP / gRPC** | `reqwest` + `h2` | +| **UI** | [Next.js 16](https://nextjs.org/) · [React 19](https://react.dev/) · [TypeScript 5.7](https://www.typescriptlang.org/) | +| **Styling** | [Tailwind CSS](https://tailwindcss.com/) · [shadcn/ui](https://ui.shadcn.com/) · [Radix UI](https://www.radix-ui.com/) | +| **Editors** | [Monaco](https://microsoft.github.io/monaco-editor/) · [Tiptap](https://tiptap.dev/) | +| **State** | [Zustand](https://github.com/pmndrs/zustand) | +| **i18n** | [next-intl](https://next-intl-docs.vercel.app/) — 27 languages | -| Tool | Purpose | -|------|---------| -| **[pnpm Workspaces](https://pnpm.io/workspaces)** | Fast, efficient monorepo package management | -| **`apps/desktop-ui`** | Next.js UI the desktop app is built from | -| **`apps/desktop`** | Tauri v2 shell (Rust) | -| **`apps/web`** | Marketing and SEO site | +Longer write-up: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md). --- -## 🚀 Getting Started +## 🛠️ Building from source ### Prerequisites - **Node.js** ≥ 22 -- **pnpm** ≥ 9 (recommended) +- **pnpm** ≥ 9 - **Rust** stable (for the desktop shell) -### Installation +### Setup ```bash -# Clone the repository git clone https://github.com/mydevtools-tech/mydevtools.git cd mydevtools - -# Install all workspace dependencies pnpm install ``` -No configuration step: the app needs no API keys, no accounts and no services. - -### Running the Desktop App +No configuration step — no API keys, no accounts, no services. -```bash -pnpm dev:desktop -``` - -### Running the Marketing Site - -```bash -pnpm dev -``` - -The site will be live at **[http://localhost:3000](http://localhost:3000)** 🎉 - ---- - -## 📜 Available Scripts +### Commands | Command | Description | -|---------|-------------| -| `pnpm dev` | Start the marketing site dev server with Turbopack | -| `pnpm dev:desktop` | Start the Tauri desktop app in dev mode | +|---|---| +| `pnpm dev:desktop` | Run the Tauri desktop app in dev mode | | `pnpm build:desktop` | Build the desktop app | +| `pnpm dev` | Run the marketing site at [localhost:3000](http://localhost:3000) | | `pnpm build` | Build all workspaces | -| `pnpm start` | Start the marketing site production server | -| `pnpm lint` | Run linting across all workspaces | -| `pnpm clean-install` | Fresh dependency install for the entire monorepo | +| `pnpm lint` | Lint across all workspaces | +| `pnpm clean-install` | Fresh dependency install for the monorepo | --- -## 📁 Project Structure +## Where MyDevTools stops -``` -mydevtools.tech/ -├── apps/ -│ ├── desktop-ui/ # Next.js UI the desktop app is built from -│ │ ├── src/ -│ │ │ ├── app/app/ # Tool pages (80+ tools) -│ │ │ ├── app/dashboard/ # Home -│ │ │ ├── app/settings/ # App settings + local profile -│ │ │ ├── components/ # Shared UI components -│ │ │ ├── store/ # Zustand state stores -│ │ │ ├── hooks/ # Custom React hooks -│ │ │ ├── lib/ # Tool logic, crypto, local API client -│ │ │ └── i18n/ # Internationalization config -│ │ └── messages/ # next-intl locale files (27 languages) -│ │ -│ ├── desktop/ # Tauri v2 shell -│ │ └── src-tauri/src/ -│ │ ├── router/ # Local API over SQLCipher -│ │ ├── dbtools/ # Native Postgres/MySQL/Mongo/Redis drivers -│ │ ├── http/ # Request proxy, gRPC, mock server -│ │ └── db/ # Schema migrations, device key -│ │ -│ └── web/ # Marketing and SEO site -│ -├── pnpm-workspace.yaml # Workspace configuration -├── package.json # Root monorepo scripts -└── scripts/ # Utility scripts -``` +Being honest about the edges is more useful than a feature list: + +- **macOS only** for published builds today. +- **Database clients are for everyday work**, not a replacement for a full DBA + suite — no visual schema designer, no migration tooling. +- **No team features.** No shared workspaces, no sync, no collaboration. Local + workspaces only. +- **Some tools need the network by definition** — DNS, WHOIS, webhooks, API + requests, database connections. --- ## 🤝 Contributing -Contributions are welcome! Whether it's a bug fix, a new tool, a UI improvement, or a docs update — we'd love your help. +Contributions are welcome — bug fixes, new tools, UI polish, translations and +docs all count. 1. **Fork** the repository -2. **Create** your feature branch: `git checkout -b feature/amazing-feature` -3. **Commit** your changes: `git commit -m 'Add amazing feature'` -4. **Push** to the branch: `git push origin feature/amazing-feature` +2. **Branch**: `git checkout -b feature/amazing-feature` +3. **Commit**: `git commit -m 'Add amazing feature'` +4. **Push**: `git push origin feature/amazing-feature` 5. **Open** a Pull Request -Please ensure your code follows the existing style and that linting passes (`pnpm lint`). +Please make sure `tsc --noEmit` and the test suite pass and follow the +surrounding code style. **[CONTRIBUTING.md](CONTRIBUTING.md)** covers setup, the +development commands, testing, translations and the six registries a new tool +has to be added to. ---- - -## 💡 Feature Requests +New here? Look for issues labelled +[`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +— they are scoped to be completable without deep knowledge of the codebase. -Have an idea for a new tool or improvement? We'd love to hear it! +**Translations** — the app ships in 27 languages and this README in 9. Improving +a locale file or a translated README needs no Rust and no build; see +[Translations in CONTRIBUTING.md](CONTRIBUTING.md#translations). -[**→ Submit a Feature Request**](https://docs.google.com/forms/d/e/1FAIpQLSfrqN2WWGF6weA_hFPsce9U6wjUpvjZzIF7KZABYMvX4xRW3A/viewform?usp=header) +| | | +|---|---| +| 🐛 Report a bug · ✨ Request a feature | [Issue templates](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 Ask a question · share a workflow | [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](SUPPORT.md) | +| 🔒 Report a vulnerability | [SECURITY.md](SECURITY.md) — privately, never a public issue | +| 🗺️ See what is planned | [ROADMAP.md](ROADMAP.md) | +| 📋 See what changed | [CHANGELOG.md](CHANGELOG.md) · [Releases](https://github.com/mydevtools-tech/mydevtools/releases) | +| 🤝 Community standards | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | --- @@ -282,17 +408,26 @@ Have an idea for a new tool or improvement? We'd love to hear it! --- -## ⭐ Support the Project +## ⭐ Support the project -If MyDevTools saves you time, consider giving it a **star** on GitHub — it helps others discover the project and motivates us to keep building! +MyDevTools is free, has no paid tier and never will. If it saves you time: + +- **Star the repository** — it is how other developers find the project. +- **[Sponsor on GitHub](https://github.com/sponsors/itsmeakhil)** — covers code-signing + certificates, hosting for the website and the tooling that keeps releases coming. +- **Tell someone** — a post, a message to a teammate, a review. [![Star on GitHub](https://img.shields.io/github/stars/mydevtools-tech/mydevtools?style=social)](https://github.com/mydevtools-tech/mydevtools) +[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-ea4aaa?style=social&logo=githubsponsors)](https://github.com/sponsors/itsmeakhil) --- ## 📄 License -This project is licensed under the [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — see [LICENSE](LICENSE) for the full text. +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — see [LICENSE](LICENSE). + +The MyDevTools name and logo identify this project and its official builds; the +code is AGPL-3.0 and forks are welcome under their own name. --- diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000..d5fd97b7 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,110 @@ +# Roadmap + +Where MyDevTools is going, and roughly in what order. + +This is a direction, not a delivery contract. Priorities move as issues come in, +and nothing here has a ship date. Items in **Now** are actively worked on; items +in **Next** are agreed direction; items in **Under consideration** are ideas that +have not been committed to. + +Shipped work lives in the +[changelog](https://mydevtools.tech/changelog) and the +[releases](https://github.com/mydevtools-tech/mydevtools/releases). + +Want to influence this list? Open a +[feature request](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) +or join a [discussion](https://github.com/mydevtools-tech/mydevtools/discussions). +Requests that come with a concrete workflow ("here is what I do today and why it +is painful") tend to move up. + +--- + +## The constraints + +Every item on this roadmap has to hold these. They are not up for negotiation, +and a feature that cannot be built within them will not be built: + +- **Offline first.** The app works with no network. No feature may make a + network connection mandatory. +- **No accounts.** No sign-up, no sign-in, no activation, no license keys. +- **No MyDevTools backend.** Your data stays on your device. +- **Free and open source.** Every tool, every feature, AGPL-3.0. No paid tier, + ever. + +--- + +## Now + +Current focus — stability and polish over new surface area. + +- **Bug fixes and stability** across the shipped tools. +- **Performance**: faster cold start, snappier large-payload handling in the + editors and result grids. +- **UX consistency**: tool headers, empty states, error messages and loading + behaviour that match across all 80+ tools. +- **Documentation**: per-tool docs on the website, an accurate README, and the + contributor guide you are reading the sibling of. +- **Accessibility**: keyboard navigation, focus states, labels and contrast + across the app. +- **Translation quality** across the 27 shipped locales. + +## Next + +Agreed direction, not yet scheduled. + +- **Windows and Linux builds.** The Tauri shell can already be built on both; + what is missing is CI, signing and enough testing to publish them. This is the + most-requested item. +- **More developer utilities**, driven by what people actually ask for in issues. +- **API client depth**: smoother collection workflows, better environment and + secret handling, richer request/response inspection. +- **Git-friendly API collections**: collections stored as folders of plain YAML, + so they can be committed, diffed and reviewed like the rest of a project. +- **Database workflow improvements**: better schema browsing, query history and + result-grid ergonomics across the SQL, MongoDB and Redis clients. +- **Keyboard shortcuts**: broader coverage and a discoverable shortcut reference. +- **Workspace improvements**: switching, per-workspace settings, and keeping + large workspaces fast. + +## Under consideration + +Ideas we like, with nothing committed. Feedback genuinely decides these. + +- **Extensibility.** Some way to add a tool without forking the app. Any design + here has to keep the security model intact — a plugin system that can read + your vault is not a plugin system worth having. +- **More database and storage targets** beyond PostgreSQL, MySQL/MariaDB, + SQLite, MongoDB, Redis and S3-compatible buckets. +- **Deeper security utilities**, building on the encryption playground, key + generation and certificate tooling. +- **Local automation**: chaining tools together for repeated workflows, on-device. +- **A public tool API** so the desktop app's logic can be scripted locally. + +## Not planned + +Being clear about these saves everyone time: + +- **Cloud sync and shared/team workspaces.** These were removed in 0.1.13 along + with the account layer, and are not coming back in a form that requires an + account or a server. Local workspaces stay. +- **A web version of the tools.** mydevtools.tech documents the app and hosts the + download; the tools run on your machine. Running them in a browser tab would + undo the reason the project exists. +- **Paid tiers, usage limits, or upsells.** +- **Ads or data harvesting.** There is no analytics in the app beyond the + opt-in, anonymous, off-by-default usage events described in + [SECURITY.md](SECURITY.md). + +--- + +## Helping + +The fastest way to move something up this list: + +- **Open an issue** describing the problem, not just the fix you have in mind. +- **Pick up a [good first issue](https://github.com/mydevtools-tech/mydevtools/labels/good%20first%20issue)** — see [`docs/GOOD_FIRST_ISSUES.md`](docs/GOOD_FIRST_ISSUES.md) for scoped starter work. +- **Improve a translation** — 27 locales, and native speakers always beat a sync script. +- **Test on Windows or Linux** and report what breaks. That is the concrete work + standing between those builds and a release. + +See [CONTRIBUTING.md](CONTRIBUTING.md) to get set up. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..7ffabf3c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,108 @@ +# Security Policy + +MyDevTools handles things developers care about: database credentials, API keys, +tokens and password vault entries. Security reports are taken seriously, and +responsible disclosure is appreciated. + +## Reporting a vulnerability + +**Please do not open a public issue for a security vulnerability.** + +Report it privately through GitHub Security Advisories: + +**→ [Report a vulnerability](https://github.com/mydevtools-tech/mydevtools/security/advisories/new)** + +That channel is private between you and the maintainers, and lets us work on a +fix and coordinate disclosure before details become public. + +### What to include + +- What kind of issue it is (for example: key handling, injection, path + traversal, weak crypto, insecure IPC) +- Which part of the app is affected — a tool name, or a file and line +- Steps to reproduce, ideally with a minimal proof of concept +- The app version (Settings → About) and your OS +- What an attacker could achieve with it + +Please use dummy credentials in your report. Do not include real secrets. + +### What to expect + +| Stage | Target | +|---|---| +| Acknowledgement of your report | Within 5 days | +| Initial assessment and severity | Within 10 days | +| Fix or mitigation plan | Depends on severity and complexity — you will be kept updated | + +MyDevTools is maintained by volunteers, so these are good-faith targets rather +than a contractual SLA. If you have not heard back within the acknowledgement +window, please ping the advisory thread. + +We do not currently run a paid bug bounty. Reporters are credited in the +advisory and the release notes unless they prefer to stay anonymous. + +## Supported versions + +Fixes land in the latest release. Only the most recent version is supported — +please reproduce on the +[latest release](https://github.com/mydevtools-tech/mydevtools/releases/latest) +before reporting. + +## Scope + +### In scope + +- The desktop application (`apps/desktop`, `apps/desktop-ui`) +- Local data storage: SQLCipher database, keychain usage, the credential vault +- Cryptographic tool implementations (encryption playground, hashing, HMAC, + TOTP, key generation) +- Handling of credentials for the SQL, MongoDB, Redis and S3 clients +- The API client's request handling and secret storage +- The marketing website (`apps/web`) and its build output + +### Out of scope + +- Vulnerabilities in **your** database, API or infrastructure that MyDevTools + merely connects to at your instruction +- Attacks that require an already-compromised machine or an attacker with local + OS-level access to the user account running the app — the local database is + encrypted with a key held in the OS keychain, which is available to that user + by design +- Missing hardening that has no demonstrated impact (for example, a header + scanner report without an exploitation path) +- Social engineering, physical attacks and denial of service against public + websites +- Reports produced solely by an automated scanner with no verified impact + +## Security design, in brief + +- **No MyDevTools backend.** There is no account system, no sync service and no + server holding user data. That removes an entire class of exposure — there is + no central store to breach. +- **Local storage is encrypted.** App data lives in a SQLCipher database keyed + from the OS keychain (Keychain on macOS). +- **Credentials get a second layer.** Database passwords, API keys and password + manager entries are encrypted with a master key derived from a password only + the user knows. A locked vault is unreadable, including to the rest of the app. +- **Outbound connections are user-initiated.** The app itself needs no network. + Traffic happens where a tool exists to make it: the API client, database + clients, DNS/WHOIS lookups, and the updater's check against GitHub releases. +- **Telemetry is opt-in and anonymous.** Off unless the user enables it. When + enabled it sends two events with a rotating session id, app version and locale + — no device id, no paths, nothing typed into a tool. See + [`apps/desktop-ui/src/lib/telemetry.ts`](apps/desktop-ui/src/lib/telemetry.ts). +- **Automated scanning.** Every push is scanned in CI + (`.github/workflows/threatcrush-scan.yml`) with results uploaded as SARIF. +- **Auditable.** The app is AGPL-3.0 and the whole source is in this repository. + Verify the claims above rather than taking them on faith. + +## Hardening tips for users + +- Set a strong, unique master password for the vault. It is not recoverable — + that is the point, and it means a forgotten password means lost vault data. +- Keep the app updated; fixes ship in the latest release. +- Download only from the + [official releases page](https://github.com/mydevtools-tech/mydevtools/releases/latest) + or [mydevtools.tech](https://mydevtools.tech). macOS builds are signed and + notarized by Apple — a build that fails Gatekeeper did not come from us. +- Use read-only or least-privilege database credentials where you can. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 00000000..5611287b --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,80 @@ +# Support + +Need help with MyDevTools? Here is where to go. + +## Where to ask + +| I want to… | Go to | +|---|---| +| Report something broken | [Open a bug report](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| Suggest a tool or improvement | [Open a feature request](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| Ask a question or get unstuck | [GitHub Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) | +| Report a security vulnerability | [SECURITY.md](SECURITY.md) — **never** a public issue | +| Read the docs | [mydevtools.tech/help](https://mydevtools.tech/help) · [Tool pages](https://mydevtools.tech/tools) · [Architecture](docs/ARCHITECTURE.md) | +| Contribute code | [CONTRIBUTING.md](CONTRIBUTING.md) | +| See what is planned | [ROADMAP.md](ROADMAP.md) | +| See what changed | [Releases](https://github.com/mydevtools-tech/mydevtools/releases) · [Changelog](https://mydevtools.tech/changelog) | + +MyDevTools is maintained by volunteers in their own time. Replies are usually +quick, but there is no guaranteed response time. A clear, reproducible report +gets answered fastest. + +## Before you ask + +A few minutes here often solves it outright: + +1. **Update to the [latest release](https://github.com/mydevtools-tech/mydevtools/releases/latest)** — the bug may already be fixed. +2. **Search [existing issues](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue)** — including closed ones. +3. **Check [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions)** for the same question. + +## What to include in a report + +- Your OS and version (for example: macOS 15.2, Apple Silicon) +- The MyDevTools version — Settings → About +- Which tool you were using +- What you did, what you expected, what happened instead +- A screenshot or short clip for anything visual + +**Redact your secrets.** Do not paste real tokens, passwords or production +connection strings into a public issue. Reproduce with dummy data, or use +`example.com` hosts. + +## Common questions + +**Do I need an account?** +No. MyDevTools has no accounts — no sign-up, no sign-in, no activation, no +license key. + +**Does it work offline?** +Yes. The app itself needs no network. Tools that exist to reach something — the +API client, database clients, DNS/WHOIS — connect to the destination you point +them at, and the updater checks GitHub for new releases. + +**Do the tools run on the website?** +No. mydevtools.tech documents the tools and hosts the download. The tools run in +the desktop app on your machine. + +**Where is my data stored?** +In a local SQLCipher database on your device, encrypted with a key from your OS +keychain. Credentials and vault entries get a second layer of encryption using +your master password. Nothing is uploaded — there is no MyDevTools server. + +**I forgot my vault master password. Can it be recovered?** +No. The vault key is derived from your password and never leaves your device, so +there is no reset path. That is what makes the vault meaningful. + +**Which platforms are supported?** +Published builds are macOS only today (universal — Apple Silicon and Intel, +signed and notarized). Windows and Linux builds are not published yet; the Tauri +shell can be built from source on those platforms, but is untested. + +**Is it really free?** +Yes — every tool and every feature, no paid tier and no limits. It is open source +under the [GNU AGPL v3](LICENSE). + +## Helping others + +Answering someone else's question in +[Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) is a +real contribution. So is confirming a bug you can reproduce, or adding the +detail that a report is missing. diff --git a/apps/desktop-ui/public/7123025_logo_google_g_icon.svg b/apps/desktop-ui/public/7123025_logo_google_g_icon.svg deleted file mode 100644 index d949ddeb..00000000 --- a/apps/desktop-ui/public/7123025_logo_google_g_icon.svg +++ /dev/null @@ -1,44 +0,0 @@ - \ No newline at end of file diff --git a/apps/desktop-ui/src/components/api-client/__tests__/virtual-history-list.test.tsx b/apps/desktop-ui/src/components/api-client/__tests__/virtual-history-list.test.tsx deleted file mode 100644 index e5f91b82..00000000 --- a/apps/desktop-ui/src/components/api-client/__tests__/virtual-history-list.test.tsx +++ /dev/null @@ -1,87 +0,0 @@ -// Approach: mock react-window so List calls rowComponent once with index:0, style:{}. -// This lets us assert that renderRow is invoked without @testing-library/react (not installed). -// The virtualization cap (renders << total items) is validated at the integration level. - -jest.mock("react-window", () => { - const React = require("react") - return { - List: ({ rowComponent: RowComponent, rowProps, rowCount }: { - rowComponent: React.ComponentType<{ ariaAttributes: object; index: number; style: React.CSSProperties } & typeof rowProps> - rowProps: Record - rowCount: number - rowHeight: number - style?: React.CSSProperties - defaultHeight?: number - }) => { - if (rowCount === 0) return null - return React.createElement(RowComponent, { - ariaAttributes: { "aria-posinset": 1, "aria-setsize": rowCount, role: "listitem" }, - index: 0, - style: {}, - ...rowProps, - }) - }, - } -}) - -describe("VirtualHistoryList", () => { - it("is a React.memo component", () => { - const { VirtualHistoryList } = require("../collections/virtual-history-list") - expect(VirtualHistoryList.$$typeof).toBe(Symbol.for("react.memo")) - }) - - it("calls renderRow with the first item and a style object", () => { - const React = require("react") - const ReactDOM = require("react-dom/server") - const { VirtualHistoryList } = require("../collections/virtual-history-list") - - const item: import("../types").HistoryRequest = { - id: "1", - name: "Test", - method: "GET", - url: "https://example.com", - params: [], - headers: [], - body: { type: "none", content: "" }, - auth: { type: "none" }, - timestamp: 1000, - } - - const renderRow = jest.fn((_item: unknown, style: React.CSSProperties) => - React.createElement("div", { style }, "row") - ) - - ReactDOM.renderToStaticMarkup( - React.createElement(VirtualHistoryList, { - items: [item], - height: 400, - onSelect: () => {}, - onDelete: () => {}, - renderRow, - }) - ) - - expect(renderRow).toHaveBeenCalledTimes(1) - expect(renderRow).toHaveBeenCalledWith(item, {}) - }) - - it("renders nothing when items array is empty", () => { - const React = require("react") - const ReactDOM = require("react-dom/server") - const { VirtualHistoryList } = require("../collections/virtual-history-list") - - const renderRow = jest.fn() - - ReactDOM.renderToStaticMarkup( - React.createElement(VirtualHistoryList, { - items: [], - height: 400, - onSelect: () => {}, - onDelete: () => {}, - renderRow, - }) - ) - - expect(renderRow).not.toHaveBeenCalled() - }) -}) diff --git a/apps/desktop-ui/src/components/app-update-notifier.tsx b/apps/desktop-ui/src/components/app-update-notifier.tsx deleted file mode 100644 index f4f05bf2..00000000 --- a/apps/desktop-ui/src/components/app-update-notifier.tsx +++ /dev/null @@ -1,140 +0,0 @@ -'use client' - -import { useCallback, useEffect, useRef, useState } from 'react' -import { X, RefreshCw } from 'lucide-react' -import { Button } from '@/components/ui/button' -import { cn } from '@/lib/utils' - -const DISMISS_KEY = 'app-update-dismissed-build' -const POLL_MS = 5 * 60 * 1000 - -export function AppUpdateNotifier() { - const [visible, setVisible] = useState(false) - const clientBuildIdRef = useRef(null) - const remoteBuildIdRef = useRef(null) - - const checkVersion = useCallback(async () => { - const clientId = clientBuildIdRef.current - if (!clientId || clientId === 'development' || clientId === 'local') { - return - } - - try { - const res = await fetch('/api/app-version', { - cache: 'no-store', - credentials: 'same-origin', - }) - if (!res.ok) return - const data = (await res.json()) as { buildId?: string } - const remoteId = typeof data.buildId === 'string' ? data.buildId : null - if (!remoteId || remoteId === 'unknown') return - - remoteBuildIdRef.current = remoteId - if (remoteId === clientId) { - setVisible(false) - return - } - - try { - const dismissed = sessionStorage.getItem(DISMISS_KEY) - if (dismissed === remoteId) return - } catch { - /* private mode */ - } - - setVisible(true) - } catch { - /* offline or blocked */ - } - }, []) - - useEffect(() => { - const clientId = process.env.NEXT_PUBLIC_APP_BUILD_ID ?? 'unknown' - if (clientId === 'development' || clientId === 'local') { - return - } - - clientBuildIdRef.current = clientId - void checkVersion() - - const interval = window.setInterval(() => void checkVersion(), POLL_MS) - - const onVisible = () => { - if (document.visibilityState === 'visible') void checkVersion() - } - document.addEventListener('visibilitychange', onVisible) - window.addEventListener('focus', onVisible) - - return () => { - window.clearInterval(interval) - document.removeEventListener('visibilitychange', onVisible) - window.removeEventListener('focus', onVisible) - } - }, [checkVersion]) - - const handleDismiss = () => { - const remote = remoteBuildIdRef.current - if (remote) { - try { - sessionStorage.setItem(DISMISS_KEY, remote) - } catch { - /* ignore */ - } - } - setVisible(false) - } - - const handleReload = () => { - window.location.reload() - } - - if (!visible) return null - - return ( -

- ) -} diff --git a/apps/desktop-ui/src/components/client-shell.tsx b/apps/desktop-ui/src/components/client-shell.tsx index b6ee4fa6..1a7d05f4 100644 --- a/apps/desktop-ui/src/components/client-shell.tsx +++ b/apps/desktop-ui/src/components/client-shell.tsx @@ -4,7 +4,6 @@ import dynamic from "next/dynamic" import { Suspense, useEffect, type ReactNode } from "react" import { UserPreferencesSync } from "@/components/user-preferences-sync" import { PinnedToolsPreferencesSync } from "@/components/pinned-tools-preferences-sync" -import { AppUpdateNotifier } from "@/components/app-update-notifier" import { initTelemetry } from "@/lib/telemetry" const GlobalCommandPalette = dynamic( @@ -38,7 +37,6 @@ export function ClientShell({ children }: Props) { <> - diff --git a/apps/desktop-ui/src/components/data-explorer/mongodb/document-view.tsx b/apps/desktop-ui/src/components/data-explorer/mongodb/document-view.tsx index a1b4bd88..86904e87 100644 --- a/apps/desktop-ui/src/components/data-explorer/mongodb/document-view.tsx +++ b/apps/desktop-ui/src/components/data-explorer/mongodb/document-view.tsx @@ -90,6 +90,15 @@ interface DocumentViewProps { // let thead and tbody size independently and drift out of alignment. const DEFAULT_COL_WIDTH = 200; +// Pinned cells sit over the horizontally scrolled ones, so their hover/selected +// tints ride on background-image (gradient) and leave the opaque background-color +// underneath. A plain `bg-muted/50` here replaces the base colour and the scrolled +// cells bleed through the 50% alpha. +const STICKY_CELL = + "sticky z-10 bg-background transition-colors bg-gradient-to-r from-transparent to-transparent group-hover:from-muted/50 group-hover:to-muted/50"; +const STICKY_CELL_SELECTED = + "from-primary/5 to-primary/5 group-hover:from-primary/10 group-hover:to-primary/10"; + // Local input state so keystrokes don't re-render the whole document grid. function EditableCell({ initialValue, @@ -933,7 +942,7 @@ export function DocumentView({ /> ))} - {t("actions")} + {t("actions")} @@ -964,7 +973,7 @@ export function DocumentView({ )} > {showSelectMode && ( - + handleSelectRow(doc._id)} @@ -972,7 +981,7 @@ export function DocumentView({ /> )} - + {index + 1 + (page - 1) * limit} {allFields.map((key) => { @@ -1060,7 +1069,7 @@ export function DocumentView({ ); })} - +
@@ -763,6 +792,131 @@ export default function Page() { + + {/* Database clients — native drivers, so they get their own row */} + +

+ Database clients included — native drivers, no extra app to install +

+
+ {databaseClients.map((client) => ( + +

+ + {client.title} + +

+

+ {client.description} +

+ + ))} +
+
+ + + + + {/* ── Desktop vs website ──────────────────────────────────────────────── */} +
+
+
+ +

+ A desktop app, not another web tool +

+

+ The tools run on your machine. This website only explains what the + app does and hands you the download — so there is no confusion about + where your data goes. +

+
+ +
+ {/* Desktop */} + +
+
+
+
+ +
+
+ + The product + +
+

MyDevTools Desktop

+
    + {[ + "All 80+ tools run locally on your machine", + "No account, no sign-in, no activation", + "No MyDevTools backend — data lives in a local encrypted database", + "Connects out only where you point a tool: API client, database clients, DNS/WHOIS, app updates", + ].map((line) => ( +
  • + + {line} +
  • + ))} +
+
+ +
+
+
+ + {/* Website */} + +
+
+
+
+ +
+
+ + Information only + +
+

This website

+
    + {[ + "Documentation for every tool, plus the changelog and download", + "The tools themselves do not run here", + "Nothing to sign up for — there is no web app and no sync", + "A normal website: it uses standard web analytics, unlike the app", + ].map((line) => ( +
  • + + {line} +
  • + ))} +
+
+ + +
+
+
+
@@ -919,12 +1073,12 @@ export default function Page() { Proof, not promises

- Public product proof and browser-side encryption instead of - vague promises. + A public launch, local encryption and source code you can read — + instead of vague promises.

-
@@ -1084,8 +1272,9 @@ export default function Page() { transition={{ duration: 0.6, delay: 0.18 }} className="text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed" > - Join developers who use MyDevTools to streamline their daily - workflow. Privacy-focused and built for speed. + Get the offline developer workstation: 80+ tools, an API client + and database clients in one desktop app. Free, open source, and + yours to keep. - Start Using Tools Now + Download MyDevTools - - View Developer Toolkit - + + Star on GitHub + + + + Free and open source · No account required · Works completely offline + diff --git a/apps/web/src/app/privacy/page.tsx b/apps/web/src/app/privacy/page.tsx new file mode 100644 index 00000000..585feca9 --- /dev/null +++ b/apps/web/src/app/privacy/page.tsx @@ -0,0 +1,156 @@ +import type { Metadata } from 'next' +import Link from 'next/link' +import { Laptop, Cloud } from 'lucide-react' +import { MarketingSeoPage } from '@/components/marketing-seo-page' +import { getPlatformSeoPage } from '@/lib/seo/platform-pages' +import { SOURCE_URL } from '@/components/footer' + +const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://mydevtools.tech' +const page = getPlatformSeoPage('privacy') +const ogImage = `${baseUrl}/api/og?title=${encodeURIComponent(page?.title ?? 'MyDevTools')}&description=${encodeURIComponent(page?.description ?? 'Local-first developer tools')}` + +export const metadata: Metadata = { + title: page?.title, + description: page?.description, + keywords: page?.keywords, + alternates: { canonical: `${baseUrl}/privacy` }, + openGraph: { + title: `${page?.title} | MyDevTools`, + description: page?.description, + url: `${baseUrl}/privacy`, + siteName: 'MyDevTools', + type: 'website', + images: [{ url: ogImage, width: 1200, height: 630, alt: page?.title ?? 'MyDevTools' }], + }, + twitter: { + card: 'summary_large_image', + title: `${page?.title} | MyDevTools`, + description: page?.description, + images: [ogImage], + }, +} + +/** Stays on the device. */ +const localParts = [ + 'Developer tools (formatting, encoding, hashing, parsing)', + 'API client — collections, environments, history', + 'SQL · MongoDB · Redis · S3 clients', + 'Notes, snippets, tasks, bookmarks', + 'Encrypted vault — passwords, API keys, .env sets', + 'SQLCipher database, keyed from your OS keychain', +] + +/** Leaves the device, and only because a tool was pointed at it. */ +const outboundParts = [ + { + what: 'API client requests', + where: 'The hosts you type into the request bar', + }, + { + what: 'Database & storage connections', + where: 'Your PostgreSQL, MySQL, MongoDB, Redis or S3 endpoint', + }, + { + what: 'DNS and WHOIS lookups', + where: 'Public DNS resolvers and RDAP/WHOIS registries', + }, + { + what: 'Update check', + where: 'GitHub releases, to see whether a newer version exists', + }, + { + what: 'Anonymous usage events (opt-in, off by default)', + where: 'Aptabase — a rotating session id, app version and locale. Nothing else.', + }, +] + +export default function PrivacyPage() { + if (!page) return null + return ( + +
+
+

+ Where your data actually lives +

+

+ There is no MyDevTools server in this diagram, because there is no + MyDevTools server. +

+ +
+ {/* On-device */} +
+
+
+ +

Your computer

+
+

+ Everything below runs and stays inside the app on your machine. +

+
    + {localParts.map((part) => ( +
  • + {part} +
  • + ))} +
+
+ + {/* Outbound */} +
+
+
+ +

What leaves, and why

+
+

+ Only what a tool was pointed at — going straight from your machine + to that destination, never through us. +

+
    + {outboundParts.map((part) => ( +
  • + {part.what} + + → {part.where} + +
  • + ))} +
+
+
+ +

+ Every claim here is checkable —{' '} + + the telemetry module + {' '} + is about a hundred lines, and the{' '} + + rest of the app + {' '} + is open source under the AGPL-3.0. +

+
+
+
+ ) +} diff --git a/apps/web/src/app/sitemap.ts b/apps/web/src/app/sitemap.ts index 83dfbc31..0e40756d 100644 --- a/apps/web/src/app/sitemap.ts +++ b/apps/web/src/app/sitemap.ts @@ -26,18 +26,6 @@ export default function sitemap(): MetadataRoute.Sitemap { changeFrequency: 'weekly' as const, priority: 0.7, }, - { - url: `${baseUrl}/login`, - lastModified: new Date(), - changeFrequency: 'monthly' as const, - priority: 0.5, - }, - { - url: `${baseUrl}/dashboard`, - lastModified: new Date(), - changeFrequency: 'weekly' as const, - priority: 0.8, - }, { url: `${baseUrl}/tools`, lastModified: new Date(), diff --git a/apps/web/src/components/footer.tsx b/apps/web/src/components/footer.tsx index cf0397de..2399117b 100644 --- a/apps/web/src/components/footer.tsx +++ b/apps/web/src/components/footer.tsx @@ -16,6 +16,8 @@ const footerLinks = [ { href: "/features", label: "Features" }, { href: "/download", label: "Download" }, { href: "/#tools", label: "Tools" }, + { href: "/open-source", label: "Open Source" }, + { href: "/privacy", label: "Privacy" }, { href: "/security", label: "Security" }, { href: "/help", label: "Help" }, { href: SOURCE_URL, label: "Source", external: true }, diff --git a/apps/web/src/lib/metadata.ts b/apps/web/src/lib/metadata.ts index 5ba52c14..bfd678e3 100644 --- a/apps/web/src/lib/metadata.ts +++ b/apps/web/src/lib/metadata.ts @@ -38,7 +38,7 @@ export const toolsMetadata: Record = { title: 'Password Manager', description: 'Securely store and manage passwords with client-side AES-256 encryption. Zero-knowledge vault.', keywords: ['password manager', 'password vault', 'secure passwords', 'password storage', 'encrypted vault'], - aiSummary: 'Zero-knowledge password vault: AES-256 encryption on your device — data is encrypted locally before anything is stored. A privacy-first, encrypted password vault in the MyDevTools desktop app.', + aiSummary: 'Zero-knowledge password vault: AES-256 encryption on your device, stored in a local encrypted database — no server, no sync. A privacy-first, encrypted password vault in the MyDevTools desktop app.', }, 'environment-manager': { title: 'Environment Manager', @@ -48,7 +48,7 @@ export const toolsMetadata: Record = { }, 'api-keys': { title: 'API Keys', - description: 'Store API keys and secrets per environment (dev / staging / prod). AES-256-GCM client-side encryption — server only sees encrypted blobs.', + description: 'Store API keys and secrets per environment (dev / staging / prod). AES-256-GCM encryption on your device — there is no server, nothing leaves your machine.', keywords: ['api key vault', 'api key manager', 'secrets manager', 'encrypted api keys', 'developer credentials', 'dev staging prod keys'], aiSummary: 'Zero-knowledge vault for API keys and secrets, scoped by environment (development / staging / production). AES-256-GCM encrypted locally on your device — a privacy-first personal secrets manager.', }, diff --git a/apps/web/src/lib/seo/comparison-pages.ts b/apps/web/src/lib/seo/comparison-pages.ts index 91557f90..beb9ec7f 100644 --- a/apps/web/src/lib/seo/comparison-pages.ts +++ b/apps/web/src/lib/seo/comparison-pages.ts @@ -941,6 +941,233 @@ export const comparisonPages: ComparisonPage[] = [ }, ], }, + { + slug: 'dbeaver-alternative', + title: 'DBeaver Alternative for Everyday Database Work', + description: + 'Compare MyDevTools with DBeaver for daily SQL, MongoDB and Redis work — a lighter desktop client with 80+ developer tools alongside it, offline and free.', + eyebrow: 'Alternative', + heading: 'DBeaver alternative for everyday database work', + intro: + 'DBeaver is a comprehensive database tool covering a very wide range of engines and administration features. MyDevTools offers a lighter database client for PostgreSQL, MySQL, MariaDB, MongoDB and Redis, next to the 80+ utilities developers reach for while debugging a query — all in one offline desktop app with encrypted local credentials.', + competitor: 'DBeaver', + toolSlug: 'sql-client', + primaryCta: { href: '/tools/sql-client', label: 'Try the SQL Client' }, + sections: [ + { + title: 'Choose DBeaver when', + body: + 'DBeaver is the better choice for deep database administration and broad engine coverage.', + bullets: [ + 'You need support for a long tail of database engines and drivers.', + 'You rely on visual schema design, ER diagrams, or advanced data migration.', + 'You do heavy DBA work rather than everyday application development.', + ], + }, + { + title: 'Choose MyDevTools when', + body: + 'MyDevTools fits the daily loop of writing a query, inspecting the result, and shaping the data around it.', + bullets: [ + 'Query PostgreSQL, MySQL and MariaDB, browse MongoDB, and inspect Redis keys from one app.', + 'Format the SQL, decode the JWT and reformat the JSON payload without leaving the workspace.', + 'Keep connection credentials in an encrypted local store, with no account and no sync.', + ], + }, + { + title: 'Verdict', + body: + 'DBeaver is the more complete database suite. MyDevTools is the lighter everyday client that happens to carry the rest of your toolkit with it.', + bullets: [ + 'Best broad database administration suite: DBeaver.', + 'Best lightweight daily client plus developer utilities: MyDevTools.', + 'Best fully offline, account-free option: MyDevTools.', + ], + }, + ], + faqs: [ + { + q: 'Is MyDevTools a full DBeaver replacement?', + a: 'No. MyDevTools covers everyday querying and browsing across PostgreSQL, MySQL, MariaDB, MongoDB and Redis. It does not offer visual schema design, ER diagrams, migration tooling, or the long tail of engines DBeaver supports.', + }, + { + q: 'Which databases can MyDevTools connect to?', + a: 'PostgreSQL, MySQL and MariaDB through the SQL client, MongoDB through the database explorer, Redis through Redis Commander, plus AWS S3 and DigitalOcean Spaces buckets. The drivers are native, so connections go straight from your machine to your database.', + }, + { + q: 'Where are my database credentials stored?', + a: 'On your device, in an encrypted local store. There is no MyDevTools account and no server for them to sync to.', + }, + ], + }, + { + slug: 'mongodb-compass-alternative', + title: 'MongoDB Compass Alternative — Offline Database Explorer', + description: + 'Compare MyDevTools with MongoDB Compass for browsing MongoDB databases, with 80+ developer tools in the same offline desktop app.', + eyebrow: 'Alternative', + heading: 'MongoDB Compass alternative with the rest of your toolkit attached', + intro: + 'MongoDB Compass is the official GUI for MongoDB, with deep support for aggregation pipelines, indexes and performance analysis. MyDevTools includes a MongoDB explorer for browsing databases, collections and documents — plus a SQL client, a Redis client, an API client and 80+ utilities in the same offline app.', + competitor: 'MongoDB Compass', + toolSlug: 'database-explorer', + primaryCta: { href: '/tools/database-explorer', label: 'Try the Database Explorer' }, + sections: [ + { + title: 'Choose MongoDB Compass when', + body: + 'Compass is the better tool for MongoDB-specific depth, built by the people who build the database.', + bullets: [ + 'You build complex aggregation pipelines with a visual builder.', + 'You need index analysis, schema profiling and query performance insight.', + 'You want first-party support for the newest MongoDB features.', + ], + }, + { + title: 'Choose MyDevTools when', + body: + 'MyDevTools suits developers who touch MongoDB as one part of a wider stack rather than living in it all day.', + bullets: [ + 'Browse databases, collections and documents without installing a MongoDB-only app.', + 'Work across MongoDB, PostgreSQL, MySQL and Redis from one window.', + 'Format the document you just pulled, hash a value, or fire an API request in the same app.', + ], + }, + { + title: 'Verdict', + body: + 'Compass is the deeper MongoDB tool. MyDevTools wins when MongoDB is one of several things you touch in a day.', + bullets: [ + 'Best MongoDB-specific depth: MongoDB Compass.', + 'Best multi-database plus utilities workspace: MyDevTools.', + 'Best offline, account-free setup: MyDevTools.', + ], + }, + ], + faqs: [ + { + q: 'Is MyDevTools a full MongoDB Compass replacement?', + a: 'No. MyDevTools covers browsing databases, collections and documents. Compass goes further with a visual aggregation pipeline builder, index analysis and schema profiling.', + }, + { + q: 'Does MyDevTools connect to MongoDB Atlas?', + a: 'The MongoDB explorer connects to the MongoDB instance you configure, using a native driver in the desktop app. Your connection goes straight from your machine to your database — MyDevTools has no server in between.', + }, + ], + }, + { + slug: 'redisinsight-alternative', + title: 'RedisInsight Alternative — Offline Redis Client', + description: + 'Compare MyDevTools with RedisInsight for browsing Redis keys and running commands, alongside SQL, MongoDB and 80+ developer tools in one offline desktop app.', + eyebrow: 'Alternative', + heading: 'RedisInsight alternative inside a wider developer toolkit', + intro: + 'RedisInsight is the official Redis GUI, with deep support for Redis modules, profiling and memory analysis. MyDevTools includes Redis Commander for browsing keys, inspecting values, running raw commands and flushing patterns — next to the SQL client, MongoDB explorer and 80+ utilities in one offline app.', + competitor: 'RedisInsight', + toolSlug: 'redis-commander', + primaryCta: { href: '/tools/redis-commander', label: 'Try Redis Commander' }, + sections: [ + { + title: 'Choose RedisInsight when', + body: + 'RedisInsight is the better tool for Redis-specific depth and operational analysis.', + bullets: [ + 'You use Redis modules such as RediSearch, RedisJSON or time series.', + 'You need memory analysis, slow-log profiling and operational dashboards.', + 'Redis is core infrastructure you monitor rather than an occasional cache.', + ], + }, + { + title: 'Choose MyDevTools when', + body: + 'MyDevTools fits developers who check a cache key or clear a pattern as part of a wider debugging session.', + bullets: [ + 'Browse keys, inspect values and run raw commands without a Redis-only install.', + 'Move between Redis, SQL and MongoDB in one window.', + 'Keep credentials in an encrypted local store, with no account and no cloud.', + ], + }, + { + title: 'Verdict', + body: + 'RedisInsight is the deeper Redis tool. MyDevTools is the more convenient one when Redis is one tab of many.', + bullets: [ + 'Best Redis-specific depth and monitoring: RedisInsight.', + 'Best everyday key browsing plus a full toolkit: MyDevTools.', + 'Best offline, account-free option: MyDevTools.', + ], + }, + ], + faqs: [ + { + q: 'Is MyDevTools a full RedisInsight replacement?', + a: 'No. MyDevTools covers key browsing, value inspection, raw commands and pattern flushing. RedisInsight goes further with module support, memory analysis and operational profiling.', + }, + { + q: 'Does Redis Commander store my connection details safely?', + a: 'Connection credentials are kept in an encrypted local store on your device. There is no MyDevTools account and no server to sync them to.', + }, + ], + }, + { + slug: 'devtoys-alternative', + title: 'DevToys Alternative for macOS — Offline Developer Tools', + description: + 'Compare MyDevTools with DevToys: a similar offline all-in-one developer toolkit, with a macOS desktop app, database clients and an API client included.', + eyebrow: 'Alternative', + heading: 'DevToys alternative for macOS, with database and API clients built in', + intro: + 'DevToys is a well-liked offline developer toolbox that started on Windows. MyDevTools takes the same local-first idea — one app, many everyday utilities, nothing uploaded — and ships a macOS desktop app that also includes an API client and SQL, MongoDB, Redis and S3 clients.', + competitor: 'DevToys', + primaryCta: { href: '/tools', label: 'Browse all tools' }, + sections: [ + { + title: 'What the two share', + body: + 'Both are offline, local-first developer toolkits that keep your input on your machine instead of posting it to a web service.', + bullets: [ + 'A single searchable app instead of a folder of single-purpose websites.', + 'Formatters, converters, encoders, hashing and generators covering the daily basics.', + 'No account required and no data uploaded for processing.', + ], + }, + { + title: 'Where MyDevTools goes further', + body: + 'MyDevTools adds the connected tools that usually mean opening a second and third application.', + bullets: [ + 'A full API client with collections, environments, gRPC and a mock server.', + 'Database clients for PostgreSQL, MySQL, MariaDB, MongoDB and Redis, plus S3 storage.', + 'Productivity tools — notes, snippets, tasks and an encrypted credential vault — in the same workspace.', + ], + }, + { + title: 'Honest differences', + body: + 'These are different projects with different histories, and neither is strictly better.', + bullets: [ + 'MyDevTools publishes macOS builds today; Windows and Linux builds are not published yet.', + 'DevToys has a longer track record on Windows and its own extension ecosystem.', + 'Both are open source — MyDevTools is licensed under the GNU AGPL v3.', + ], + }, + ], + faqs: [ + { + q: 'Is MyDevTools available on Windows or Linux?', + a: 'Not as a published build yet. macOS builds are released today as a signed, notarized universal app. The Tauri shell can be built from source on Windows and Linux, but those builds are untested — see the roadmap.', + }, + { + q: 'Is MyDevTools open source like DevToys?', + a: 'Yes. MyDevTools is licensed under the GNU AGPL v3, and the whole monorepo — desktop shell, tools and website — is public on GitHub.', + }, + { + q: 'Does MyDevTools cost anything?', + a: 'No. Every tool and every feature is free, with no paid tier, no trial and no limits.', + }, + ], + }, ] export const comparisonPageSlugs = comparisonPages.map((page) => page.slug) diff --git a/apps/web/src/lib/seo/platform-pages.ts b/apps/web/src/lib/seo/platform-pages.ts index 10e2e937..411d14ee 100644 --- a/apps/web/src/lib/seo/platform-pages.ts +++ b/apps/web/src/lib/seo/platform-pages.ts @@ -239,6 +239,131 @@ export const platformSeoPages: PlatformSeoPage[] = [ }, ], }, + { + slug: 'open-source', + title: 'Open Source Developer Tools — AGPL-3.0', + description: + 'MyDevTools is free and open source under the GNU AGPL v3. Read the source, build it yourself, report an issue, or contribute — the desktop app, the tools, and this website are all public.', + keywords: [ + 'open source developer tools', + 'open source developer toolkit', + 'agpl developer tools', + 'free open source api client', + 'open source database client', + ], + eyebrow: 'Open Source', + heading: 'Built in the open. Designed for developers.', + intro: + 'Every part of MyDevTools is public: the Tauri desktop shell, the 80+ tools, the database clients, and this website. It is licensed under the GNU AGPL v3, so the privacy claims on this site are not something you have to take on trust — you can read the code that backs them.', + primaryCta: { + href: 'https://github.com/mydevtools-tech/mydevtools', + label: 'View the source on GitHub', + }, + secondaryCta: { href: '/download', label: 'Download the app' }, + sections: [ + { + title: 'License and what it means', + body: + 'MyDevTools is licensed under the GNU Affero General Public License v3.0. You can use it for anything, including at work, and you can fork it.', + bullets: [ + 'Free for everyone — every tool and every feature, with no paid tier and no limits.', + 'Read, build, modify and redistribute the source under the AGPL-3.0 terms.', + 'Derivative works stay open under the same license, which keeps the project auditable.', + ], + }, + { + title: 'How the project is built', + body: + 'A pnpm monorepo: a Tauri v2 shell in Rust, a Next.js UI the desktop app is built from, and this marketing site. There is no backend anywhere in it.', + bullets: [ + 'Tauri v2 shell with SQLCipher storage keyed from the OS keychain.', + 'Native Rust drivers for PostgreSQL, MySQL, MongoDB and Redis.', + 'Tool logic lives in pure, unit-tested modules that anyone can read and verify.', + ], + }, + { + title: 'Contributing and community', + body: + 'Bug reports, new tools, translations across 27 locales, and documentation fixes are all welcome. The contributor guide documents the real setup, commands and conventions.', + bullets: [ + 'Start with CONTRIBUTING.md and the issues labelled "good first issue".', + 'Report bugs and request features through the GitHub issue templates.', + 'Report vulnerabilities privately through a GitHub security advisory — see SECURITY.md.', + ], + }, + { + title: 'Roadmap and releases', + body: + 'What is being worked on now, what comes next, and what will never be built is written down publicly rather than implied.', + bullets: [ + 'ROADMAP.md separates current work from agreed direction and from ideas under consideration.', + 'Releases and release notes are published on GitHub, and mirrored to the changelog on this site.', + 'Cloud sync, accounts and paid tiers are explicitly not planned.', + ], + }, + ], + }, + { + slug: 'privacy', + title: 'Privacy Architecture — Local-First Developer Tools', + description: + 'How MyDevTools handles your data: local processing, an encrypted database on your device, no account, no backend, and only the outbound connections you ask a tool to make.', + keywords: [ + 'private developer tools', + 'local first developer tools', + 'offline developer tools privacy', + 'no account developer tools', + 'encrypted local storage', + ], + eyebrow: 'Privacy', + heading: 'Your developer data stays on your machine', + intro: + 'MyDevTools Desktop has no account system and no backend. Tool input, notes, snippets and credentials are processed and stored on your device, in a database encrypted with a key from your OS keychain. This page describes exactly what that means — including the connections that do leave your machine, and why.', + primaryCta: { href: '/download', label: 'Download the app' }, + secondaryCta: { href: '/security', label: 'Security details' }, + sections: [ + { + title: 'Local processing and local storage', + body: + 'The tools run inside the desktop app on your machine. There is no MyDevTools server to send anything to, which is a property of the architecture rather than a promise about our conduct.', + bullets: [ + 'Formatting, encoding, hashing and parsing happen on your device.', + 'App data lives in a local SQLCipher database, encrypted with a key held in your OS keychain.', + 'Credentials, API keys and password vault entries get a second layer of encryption using a master password only you know.', + ], + }, + { + title: 'Connections you initiate', + body: + 'The app itself needs no network. Some tools exist precisely to reach somewhere, and those connect to the destination you configure — not through us.', + bullets: [ + 'The API client sends the requests you write, to the hosts you choose.', + 'The SQL, MongoDB, Redis and S3 clients connect straight from your machine to your database or bucket.', + 'DNS and WHOIS lookups query public registries, and the updater checks GitHub for new releases.', + ], + }, + { + title: 'No account, no sync, no telemetry by default', + body: + 'There is nothing to sign up for and nothing that quietly phones home. Usage analytics are off until you turn them on.', + bullets: [ + 'No sign-up, no sign-in, no activation and no license key.', + 'No cloud sync and no shared storage — the account layer was removed from the project entirely.', + 'Optional anonymous usage events (a rotating session id, app version and locale) only if you enable them. No device id, no file paths, nothing typed into a tool.', + ], + }, + { + title: 'This website is not the app', + body: + 'mydevtools.tech documents the tools and hosts the download. The tools do not run here, and this site has ordinary website properties — it is a normal web page, with standard web analytics.', + bullets: [ + 'No web app, no login and no dashboard — there is nothing here to store your data in.', + 'The privacy properties described above belong to the desktop app on your machine.', + 'Both are open source under the AGPL-3.0, so either claim can be checked against the code.', + ], + }, + ], + }, ] export const platformSeoPageSlugs = platformSeoPages.map((page) => page.slug) diff --git a/apps/web/src/lib/seo/structured-data.ts b/apps/web/src/lib/seo/structured-data.ts index 3389b5c9..871ec784 100644 --- a/apps/web/src/lib/seo/structured-data.ts +++ b/apps/web/src/lib/seo/structured-data.ts @@ -24,6 +24,14 @@ export const homepageFaqItems = [ q: 'Does it work offline?', a: 'Yes. MyDevTools is a desktop app — most tools run fully offline on your machine. Tools that connect to external services or send API requests need a network connection.', }, + { + q: 'Do the tools run on this website?', + a: 'No. This site documents the tools and links to the download; the tools themselves run in the MyDevTools desktop app on your machine. That is what keeps your data local — there is no web app and no server to send it to.', + }, + { + q: 'Which databases can MyDevTools connect to?', + a: 'PostgreSQL, MySQL and MariaDB through the SQL client, MongoDB through the database explorer, Redis through Redis Commander, plus AWS S3 and DigitalOcean Spaces buckets. The drivers are native, so connections go straight from your machine to your database, and credentials are stored encrypted on your device.', + }, ] /** Slug from pathname like `/app/json-formatter` → `json-formatter` */ diff --git a/assets/SHOT_LIST.md b/assets/SHOT_LIST.md new file mode 100644 index 00000000..bcb2fe5f --- /dev/null +++ b/assets/SHOT_LIST.md @@ -0,0 +1,35 @@ +# README screenshots — shot list + +Temporary file. Delete it once every image below exists in `assets/`. + +The README already references these exact filenames, so nothing else has to change +when the files land — just drop them in and uncomment the `` block in +`README.md`. + +## General rules + +- Capture from the **real desktop app** (Tauri build or `pnpm dev:tauri`), not the + browser. Hide the macOS menu bar and dock; use a plain window, no shadow. +- Window size **1600 × 1000** (Retina 2× is fine → 3200 × 2000 px). Same size for + every shot so they line up in the README. +- Use **dummy data only**: no real emails, tokens, connection strings, hostnames or + bucket names. Display name in the app: set to something like `Dev`. +- Sidebar visible; no browser-style chrome; no toasts or tooltips mid-fade. +- Export PNG, then run them through the in-app **Image Compressor** (or `pngquant`) + so each stays under ~400 KB. + +## Shots + +| File | Theme | What to show | Notes | +|---|---|---|---| +| `assets/hero-dark.png` | dark | Home / dashboard: sidebar + tool grid, a couple of pinned tools | Shown by default on GitHub dark mode. Hero of the README — make it count. | +| `assets/hero-light.png` | light | Same view, same state, light theme | Shown on GitHub light mode. | +| `assets/api-client.png` | dark | API Client: a `GET https://httpbin.org/json` request with the response body and status visible | Shows collections/environments panel if it fits. | +| `assets/sql-client.png` | dark | SQL Client: a query and a result grid | Local Postgres/MySQL with sample rows; credentials never on screen. | +| `assets/command-palette.png` | dark | ⌘K command palette open with a partial query (e.g. `jwt`) and matches listed | Backs the "one search box" claim. | +| `assets/demo.gif` (optional) | dark | 10–15 s: ⌘K → open JSON Formatter → paste/format → ⌘K → API Client → send | ≤ 8 MB, 1600 × 1000, 15 fps. Kap / CleanShot / Gifski. | + +## Social preview (repo Settings → Social preview) + +`assets/social-preview.png` (1280 × 640) is generated separately — see the PR +description. Upload it manually; GitHub has no API for it. diff --git a/assets/logo-dark.png b/assets/logo-dark.png new file mode 100644 index 00000000..ca3a5232 Binary files /dev/null and b/assets/logo-dark.png differ diff --git a/assets/logo-light.png b/assets/logo-light.png new file mode 100644 index 00000000..7cb8a480 Binary files /dev/null and b/assets/logo-light.png differ diff --git a/assets/social-preview.png b/assets/social-preview.png new file mode 100644 index 00000000..a62378a6 Binary files /dev/null and b/assets/social-preview.png differ diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 00000000..2348ca26 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,116 @@ +# MyDevTools architecture + +How the desktop app is put together, for contributors. User-facing docs live at +[mydevtools.tech/help](https://mydevtools.tech/help); the front door is the +[README](../README.md). + +## One sentence + +A Next.js UI (`apps/desktop-ui`) runs inside a Tauri v2 shell (`apps/desktop`); +everything the UI would normally ask a server for — storage, database drivers, +HTTP/gRPC, vault crypto — is answered by Rust on the same machine. + +There is no MyDevTools backend, no account system and no sync service. The +marketing site (`apps/web`) is a separate, static Next.js app and never runs the +tools. + +## Repository layout + +``` +apps/ +├── desktop/ Tauri v2 shell (Rust) +│ └── src-tauri/src/ +│ ├── lib.rs Tauri commands: local_api, http_request(_stream), proxy_grpc, mock_server_start +│ ├── router/ Local API router — one module per resource (notes, tasks, bookmarks, +│ │ snippets, api_client, master_vault, preferences, workspaces, backup, …) +│ ├── db/ SQLCipher open/migrate, device key from the OS keychain +│ ├── dbtools/ Native drivers: Postgres, MySQL, MongoDB, Redis, SQLite +│ └── http/ reqwest proxy, gRPC over h2, mock server +│ +├── desktop-ui/ Next.js 16 / React 19 UI — the 80+ tools +│ ├── src/app/app/ One route per tool (page.tsx + layout.tsx) +│ ├── src/components/ Tool layouts, sidebar, command palette, shared UI +│ ├── src/lib/ Pure tool logic (unit-tested), crypto, local API client +│ ├── src/lib/desktop/ Tauri bridge: api-fetch.ts, updater, backup +│ ├── src/store/ Zustand stores +│ └── messages/ next-intl locale files (27 languages, en.json is canonical) +│ +└── web/ mydevtools.tech — marketing/SEO only (Next.js, static) +``` + +## Data flow + +``` +┌──────────────────────── Tauri window ─────────────────────────┐ +│ │ +│ Next.js UI (apps/desktop-ui) │ +│ │ lib/backend-api.ts → lib/desktop/api-fetch.ts │ +│ │ "fetch('/api/v1/notes')" is a *contract*, never HTTP │ +│ ▼ │ +│ invoke("local_api", { method, path, body }) ── Tauri IPC │ +│ │ │ +│ ▼ │ +│ Rust router (src-tauri/src/router/*) │ +│ ├── SQLCipher (rusqlite, bundled) ← key from OS keychain │ +│ ├── dbtools/* → your Postgres / MySQL / MongoDB / Redis │ +│ └── http/* → your API endpoints, gRPC, mock server │ +└───────────────────────────────────────────────────────────────┘ +``` + +- **`/api/v1/...` paths** in the UI are routed by the Rust router, not by any + web server. Keeping the REST-shaped contract means tool code reads like + ordinary fetch code and is easy to unit-test. +- **Storage** is a single SQLCipher database in the app data directory, + encrypted with a device key held in the macOS Keychain (`db/device_key.rs`). + Schema migrations live in `db/migrations.rs`. +- **Vault data** (password manager, API keys, database credentials) is + additionally encrypted with a user master password; the master key never + leaves the machine. Creating/unlocking the vault is entirely offline. +- **Database clients** use native Rust drivers, so a connection goes straight + from the user's machine to their database — nothing is proxied. +- **API client** requests go through `reqwest` in Rust, which is why the app + is not subject to browser CORS rules. Streaming responses and gRPC use the + same path (`http_request_stream`, `proxy_grpc`). +- **Updater** checks `github.com/mydevtools-tech/mydevtools/releases/latest/download/latest.json` + (Tauri updater, minisign-verified). + +## Privacy boundaries + +| Leaves the machine | Only when | +|---|---| +| API client / WebSocket / webhook traffic | you send a request to an endpoint you typed | +| Database connections | you configure a host and connect | +| DNS / WHOIS queries | you run those tools (public resolvers / RDAP) | +| Update check | the updater runs (GitHub Releases) | +| `app_started`, `tool_opened {tool}` | **only** if you opt in to anonymous usage stats — rotating session id, app version, locale; no tool input, paths or stable ids (`apps/desktop-ui/src/lib/telemetry.ts`) | + +Nothing else. There is no crash reporter, no analytics SDK in the app and no +MyDevTools server to talk to. Marketing-site analytics exist only in `apps/web`. + +## Identity + +There are no accounts. `utils/useAuth` returns a fixed local `uid` (`"local"`); +the display name and avatar are local preferences (`useAppUser`). Historical +web-era routes such as `/account/plan` redirect to `/download` because shipped +builds still hard-open them. + +## Tech stack + +| Layer | Technology | +|---|---| +| Shell | Tauri v2 (Rust) | +| Storage | SQLCipher via `rusqlite` (`bundled-sqlcipher-vendored-openssl`), OS keychain via `keyring` | +| DB drivers | `tokio-postgres`, `mysql_async`, `mongodb`, `redis`, `rusqlite` | +| HTTP / gRPC | `reqwest` (HTTP), `h2` (gRPC framing, no tonic) | +| UI | Next.js 16, React 19, TypeScript 5.7, Tailwind, shadcn/ui, Radix | +| Editors | Monaco (code), Tiptap (notes) | +| State | Zustand | +| i18n | next-intl — 27 locales | +| Tests | Jest (`apps/desktop-ui`), `cargo test` (`apps/desktop/src-tauri`) | + +## Adding a tool + +See [CONTRIBUTING.md → Adding a new tool](../CONTRIBUTING.md#adding-a-new-tool): +per-tool files plus six registries (`metadata.ts`, `route-config.ts`, +`tab-registry.tsx`, `tool-categories.ts`, `tool-i18n.ts`, sidebar data) and +i18n keys in all 27 locales. diff --git a/docs/readme/readme_de.md b/docs/readme/readme_de.md new file mode 100644 index 00000000..83ffe99e --- /dev/null +++ b/docs/readme/readme_de.md @@ -0,0 +1,212 @@ +

+ + + MyDevTools Logo + +

+ +

MyDevTools

+ +

+ Die Offline-Workstation für Entwickler +

+ +

+ 80+ Entwickler-Tools, ein API-Client, SQL- / MongoDB- / Redis-Clients, Verschlüsselung
+ und Produktivitäts-Helfer — alles läuft lokal auf deinem Rechner. +

+ +

+ Kostenlos · Open Source · Offline · Kein Account · Keine Werbung +

+ +

+ Neuestes Release + CI + Downloads + Lizenz AGPL-3.0 + GitHub-Stars +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ Download • + 🌐 Website • + 📚 Doku • + 📋 Changelog • + 🗺️ Roadmap • + 🤝 Mitmachen • + 💬 Diskussionen +

+ + + +> Dies ist eine Übersetzung des [englischen README](../../README.md), das die +> maßgebliche Fassung ist und aktueller sein kann. Korrekturen sind willkommen — siehe +> [Übersetzungen](../../CONTRIBUTING.md#translations). + +--- + +## Was ist MyDevTools? + +MyDevTools ist eine **Desktop-Anwendung**, die den Stapel aus Tabs, Wegwerf-Websites +und Ein-Zweck-Apps ersetzt, den man als Entwickler jeden Tag öffnet. Formatierer, +Konverter, Generatoren, Krypto-Werkzeuge, ein API-Client, SQL- / MongoDB- / +Redis-Clients, Notizen, Snippets und ein Tresor für Zugangsdaten — eine App, ein +Suchfeld, ein Tastenkürzel. + +Alles läuft auf deinem Rechner. Es gibt keinen MyDevTools-Server, keinen Account und keine Synchronisierung. + +| Der übliche Aufbau | MyDevTools | +|---|---| +| Ein Dutzend Tabs mit Ein-Zweck-Tool-Websites | Eine Desktop-App, `⌘K` bringt dich überallhin | +| Tools, die deine Daten zum Formatieren auf einen Server laden | Die Verarbeitung passiert auf deinem Rechner | +| Registrierungshürden und Lizenzschlüssel | Kein Account, kein Login, keine Aktivierung | +| Getrennte Apps für SQL, MongoDB und Redis | SQL + MongoDB + Redis + S3 an einem Ort | +| Bezahltarife für einfache Werkzeuge | Kostenlos — jedes Tool, jede Funktion | +| Closed-Source-Werkzeuge, die du nicht prüfen kannst | AGPL-3.0, die komplette App liegt in diesem Repo | + +--- + +## 📦 Installation + +| Plattform | Wie | +|---|---| +| **macOS** (Apple Silicon + Intel) | [Neuestes `.dmg` herunterladen](https://github.com/mydevtools-tech/mydevtools/releases/latest) — Universal Build, signiert und notarisiert, aktualisiert sich in der App | +| **Windows / Linux** | Noch nicht veröffentlicht. Die Tauri-Shell baut auf beiden — siehe [Aus dem Quellcode bauen](../../README.md#%EF%B8%8F-building-from-source) und die [Roadmap](../../ROADMAP.md). Tests auf diesen Plattformen sind ein hervorragender erster Beitrag | + +Öffnen und loslegen: keine Registrierung, keine Konfiguration, keine API-Schlüssel. + +--- + +## 🧰 Tools + +80+ Tools, gruppiert wie in der Seitenleiste. Die vollständige Liste mit +Beschreibungen steht im [englischen README](../../README.md#-tools). + +| Kategorie | Beispiele | +|---|---| +| 📝 **Formatierer & Validatoren** | JSON-Formatierer, JSON Visualizer, JSON-Diff, JSON-Schema-Generator, JSON to Code, YAML-Formatierer, Format-Konverter (JSON / YAML / TOML / XML), SQL-Formatierer, GraphQL-Formatierer, Markdown-Vorschau, Textvergleich, Regex-Tester | +| 🌐 **Netzwerk & API** | API-Client (Collections, Umgebungen, Auth, gRPC, Mock-Server — ohne CORS-Grenzen des Browsers), cURL to Code, Webhook-Tester, WebSocket-Tester, DNS-Abfrage, Whois-Abfrage, IP-/Subnetz-Rechner, HTTP-Statuscodes, User-Agent Parser | +| 🗄️ **Datenbank- & Storage-Clients** | SQL Client (PostgreSQL, MySQL, MariaDB), Datenbank-Explorer (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces) — native Rust-Treiber, direkt von deinem Rechner zu deiner Datenbank | +| 🔐 **Sicherheit & Krypto** | Passwort-Manager, Verschlüsselungs-Spielplatz (AES-GCM), JWT-Decoder, Hash-Generator, HMAC-Generator, Bcrypt, TOTP / 2FA-Code, SSH / RSA-Schlüsselgenerator, Zertifikat- / PEM-Decoder, Umgebungs-Manager, Geheimnis / API-Schlüssel | +| 🔄 **Konverter** | Base64-Kodierung, Bild zu Base64, URL-Kodierung / URL-Parser, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, Basiskonverter, Zeitstempel- / Zeitzonen-Konverter, Einheitenrechner, Chmod-Rechner, LLM-Token-Zähler | +| ⚙️ **Generatoren** | UUID / ULID, Mock-Datengenerator, Cron-Editor, Docker-Compose-Generator, .gitignore-Generator, QR-Code-Generator, Markdown-Tabelle, Lorem Ipsum | +| 🎨 **Medien & Design** | Farbauswahl, Kontrastprüfung, CSS-Verlaufsgenerator, CSS-Generatoren, Bildkomprimierung, SVG-Optimierer, EXIF-Viewer & -Entferner, Favicon-Generator, Code-Screenshot, Keycode-Inspektor | +| 📱 **Produktivität** | Notizen, Code-Snippets, Aufgaben, Lesezeichen, API Keys, Pausenraum (2048, Sudoku, Snake, Minesweeper, Tetris) | + +Alles ist über eine einzige Befehlspalette durchsuchbar, im hellen oder dunklen +Modus, in 27 Sprachen. + +--- + +## 🔒 Datenschutz by Design + +- **Kein MyDevTools-Server.** Kein Backend, bei dem du dich anmeldest, kein + Sync-Dienst, kein Account-System. Tool-Eingaben, Notizen, Snippets, Aufgaben und + Lesezeichen landen in einer lokalen SQLCipher-Datenbank, verschlüsselt mit einem + Schlüssel aus dem Schlüsselbund des Betriebssystems. +- **Zugangsdaten liegen im verschlüsselten Tresor.** Datenbank-Passwörter, + API-Schlüssel und Einträge im Passwort-Manager werden lokal mit einem + Master-Passwort verschlüsselt, das nur du kennst. +- **Du entscheidest über jede ausgehende Verbindung.** Die App selbst braucht kein + Netzwerk, aber manche Tools sind dafür da, mit *deinen* Zielen zu sprechen: Der + API-Client schickt die Requests, die du schreibst, die Datenbank-Clients verbinden + sich mit den Hosts, die du konfigurierst, DNS- / WHOIS-Abfragen gehen an öffentliche + Register, und der Updater prüft GitHub-Releases. Sonst verlässt nichts den Rechner. +- **Optionale, anonyme Nutzungsstatistik.** Aus, solange du sie nicht einschaltest. + Eingeschaltet werden zwei Events (`app_started`, `tool_opened`) mit einer rotierenden + Session-ID, der App-Version und der Sprache gesendet. Keine Geräte-ID, keine Pfade, + nichts, was du in ein Tool tippst. +- **Nachprüfbar.** AGPL-3.0. Alles oben Behauptete steht in diesem Repo — lies es nach. + +--- + +## 🏗️ Architektur + +Eine Next.js 16 / React 19-Oberfläche (`apps/desktop-ui`) in einer Tauri v2-Shell +(`apps/desktop`, Rust). Gespeichert wird in SQLCipher mit einem Schlüssel aus dem +Schlüsselbund des Betriebssystems; Datenbanktreiber, HTTP / gRPC und der Mock-Server +sind natives Rust. Die Website (`apps/web`) ist reines Marketing — die Tools laufen +dort nicht. +Details: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md). + +--- + +## 🛠️ Aus dem Quellcode bauen + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Benötigt Node.js ≥ 22, pnpm ≥ 9 und stabiles Rust. Kein Konfigurationsschritt — keine +API-Schlüssel, keine Accounts, keine Dienste. + +--- + +## Wo MyDevTools aufhört + +- **Nur macOS** bei den heute veröffentlichten Builds. +- **Die Datenbank-Clients sind für die tägliche Arbeit gedacht**, kein Ersatz für eine + vollständige DBA-Suite — kein visueller Schema-Designer, keine Migrations-Werkzeuge. +- **Keine Team-Funktionen.** Keine geteilten Workspaces, keine Synchronisierung, keine Zusammenarbeit. +- **Manche Tools brauchen naturgemäß das Netzwerk** — DNS, WHOIS, Webhooks, + API-Requests, Datenbankverbindungen. + +--- + +## 🤝 Mitmachen + +Beiträge sind willkommen — Bugfixes, neue Tools, UI-Feinschliff, Übersetzungen und +Doku zählen alle. Fang mit [CONTRIBUTING.md](../../CONTRIBUTING.md) an; Issues mit dem +Label [`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +sind auf Einsteiger zugeschnitten. + +Diese Übersetzung oder eine Sprachdatei in `apps/desktop-ui/messages/` zu verbessern, +braucht weder Rust noch einen Build. + +| | | +|---|---| +| 🐛 Bug melden · ✨ Feature vorschlagen | [Issue-Vorlagen](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 Frage stellen | [Diskussionen](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 Sicherheitslücke melden | [SECURITY.md](../../SECURITY.md) — privat, niemals als öffentliches Issue | +| 🗺️ Sehen, was geplant ist | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 Community-Regeln | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ Projekt unterstützen + +MyDevTools ist kostenlos, hat keinen Bezahltarif und wird nie einen haben. Wenn es dir +Zeit spart: gib dem Repository einen Stern, [sponsore auf GitHub](https://github.com/sponsors/itsmeakhil) +oder erzähl es jemandem im Team. + +--- + +## 📄 Lizenz + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — siehe [LICENSE](../../LICENSE). + +

+ Mit ❤️ gebaut von Akhil und Mitwirkenden +

diff --git a/docs/readme/readme_es.md b/docs/readme/readme_es.md new file mode 100644 index 00000000..93f9a86a --- /dev/null +++ b/docs/readme/readme_es.md @@ -0,0 +1,214 @@ +

+ + + Logo de MyDevTools + +

+ +

MyDevTools

+ +

+ La estación de trabajo offline para desarrolladores +

+ +

+ Más de 80 herramientas para desarrolladores, un cliente de API, clientes SQL / MongoDB / Redis, cifrado
+ y utilidades de productividad, todo ejecutándose localmente en tu máquina. +

+ +

+ Gratis · Código abierto · Offline · Sin cuenta · Sin anuncios +

+ +

+ Última versión + CI + Descargas + Licencia AGPL-3.0 + Estrellas en GitHub +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ Descargar • + 🌐 Sitio web • + 📚 Documentación • + 📋 Registro de cambios • + 🗺️ Hoja de ruta • + 🤝 Contribuir • + 💬 Discusiones +

+ + + +> Esta es una traducción del [README en inglés](../../README.md), que es la +> versión canónica y puede estar más actualizada. Se agradecen las correcciones: +> consulta [Traducciones](../../CONTRIBUTING.md#translations). + +--- + +## ¿Qué es MyDevTools? + +MyDevTools es una **aplicación de escritorio** que reemplaza la pila de pestañas, +sitios sueltos y apps de un solo uso que un desarrollador abre cada día. +Formateadores, conversores, generadores, utilidades de criptografía, un cliente de +API, clientes SQL / MongoDB / Redis, notas, fragmentos de código y una bóveda de +credenciales: una sola app, un solo buscador, un solo atajo de teclado. + +Se ejecuta en tu máquina. No hay servidor de MyDevTools, ni cuenta, ni sincronización. + +| El montaje habitual | MyDevTools | +|---|---| +| Una docena de pestañas con sitios de herramientas de un solo uso | Una app de escritorio, `⌘K` para saltar a donde sea | +| Herramientas que suben tus datos a un servidor para formatearlos | El procesamiento ocurre en tu máquina | +| Muros de registro y claves de licencia | Sin cuenta, sin inicio de sesión, sin activación | +| Apps separadas para SQL, MongoDB y Redis | SQL + MongoDB + Redis + S3 en un solo lugar | +| Planes de pago para utilidades básicas | Gratis: todas las herramientas, todas las funciones | +| Herramientas de código cerrado que no puedes auditar | AGPL-3.0, toda la app está en este repositorio | + +--- + +## 📦 Instalación + +| Plataforma | Cómo | +|---|---| +| **macOS** (Apple Silicon + Intel) | [Descarga el `.dmg` más reciente](https://github.com/mydevtools-tech/mydevtools/releases/latest): compilación universal, firmada y notarizada, se actualiza sola desde la app | +| **Windows / Linux** | Todavía no se publican. El contenedor Tauri compila en ambos: consulta [Compilar desde el código fuente](../../README.md#%EF%B8%8F-building-from-source) y la [hoja de ruta](../../ROADMAP.md). Probar en estas plataformas es una excelente primera contribución | + +Ábrela y ponte a trabajar: sin registro, sin configuración, sin claves de API. + +--- + +## 🧰 Herramientas + +Más de 80 herramientas, agrupadas como las agrupa la barra lateral. La lista +completa con descripciones está en el [README en inglés](../../README.md#-tools). + +| Categoría | Ejemplos | +|---|---| +| 📝 **Formateadores y validadores** | Formateador JSON, JSON Visualizer, Diff JSON, Generador de esquema JSON, JSON to Code, Formateador YAML, Conversor de formatos (JSON / YAML / TOML / XML), Formateador SQL, Formateador GraphQL, Vista previa Markdown, Comparador de diferencias, Probador de expresiones regulares | +| 🌐 **Red y API** | Cliente API (colecciones, entornos, autenticación, gRPC, servidor mock, sin límites de CORS del navegador), cURL to Code, Probador de webhooks, Probador de WebSocket, Búsqueda DNS, Consulta Whois, Calculadora IP / subred, Códigos de estado HTTP, User-Agent Parser | +| 🗄️ **Clientes de bases de datos y almacenamiento** | SQL Client (PostgreSQL, MySQL, MariaDB), Explorador de bases de datos (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces): drivers nativos en Rust, directo de tu máquina a tu base de datos | +| 🔐 **Seguridad y criptografía** | Gestor de contraseñas, Cifrado (prácticas, AES-GCM), Decodificador JWT, Generador de hash, Generador HMAC, Bcrypt, Código TOTP / 2FA, Generador de claves SSH / RSA, Decodificador de certificados / PEM, Gestor de entornos, Secreto / clave API | +| 🔄 **Conversores** | Base64, Imagen a Base64, Codificador / analizador de URL, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, Conversor de base, Conversor de marcas de tiempo / zonas horarias, Convertidor de unidades, Calculadora Chmod, Contador de tokens LLM | +| ⚙️ **Generadores** | UUID / ULID, Generador de datos de prueba, Constructor Cron, Generador Docker Compose, Generador .gitignore, Generador de códigos QR, Tabla Markdown, Lorem Ipsum | +| 🎨 **Medios y diseño** | Selector de color, Comprobador de contraste, Generador de degradado CSS, Generadores CSS, Compresor de imágenes, Optimizador SVG, Visor EXIF y eliminador, Generador de favicon, Captura de código, Inspector de keycode | +| 📱 **Productividad** | Notas, Fragmentos de código, Tareas, Marcadores, Claves API, Sala de descanso (2048, Sudoku, Snake, Buscaminas, Tetris) | + +Todo se busca desde una única paleta de comandos, en modo oscuro o claro, en 27 +idiomas. + +--- + +## 🔒 Privacidad por diseño + +- **Sin servidor de MyDevTools.** No hay backend al que iniciar sesión, ni servicio + de sincronización, ni sistema de cuentas. Lo que escribes en las herramientas, + las notas, los fragmentos, las tareas y los marcadores se guardan en una base de + datos SQLCipher local, cifrada con una clave almacenada en el llavero del sistema. +- **Las credenciales se cifran en la bóveda.** Las contraseñas de bases de datos, + las claves de API y las entradas del gestor de contraseñas se cifran localmente + con una contraseña maestra que solo tú conoces. +- **Tú decides cada conexión saliente.** La app en sí no necesita red, pero algunas + herramientas existen para hablar con *tus* destinos: el cliente de API envía las + peticiones que escribes, los clientes de bases de datos se conectan a los hosts + que configuras, las consultas DNS / WHOIS interrogan registros públicos y el + actualizador consulta las releases de GitHub. Nada más sale. +- **Estadísticas de uso opcionales y anónimas.** Desactivadas salvo que las + actives. Cuando están activas se envían dos eventos (`app_started`, + `tool_opened`) con un id de sesión rotativo, la versión de la app y el idioma. + Sin id de dispositivo, sin rutas, sin nada de lo que escribas en una herramienta. +- **Auditable.** AGPL-3.0. Todo lo anterior está en este repositorio: compruébalo. + +--- + +## 🏗️ Arquitectura + +Una interfaz Next.js 16 / React 19 (`apps/desktop-ui`) dentro de un contenedor +Tauri v2 (`apps/desktop`, Rust). El almacenamiento es SQLCipher con clave del +llavero del sistema; los drivers de bases de datos, HTTP / gRPC y el servidor mock +son nativos en Rust. El sitio web (`apps/web`) es solo marketing: las herramientas +no se ejecutan ahí. +Detalles: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md). + +--- + +## 🛠️ Compilar desde el código fuente + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Requiere Node.js ≥ 22, pnpm ≥ 9 y Rust estable. Sin paso de configuración: sin +claves de API, sin cuentas, sin servicios. + +--- + +## Hasta dónde llega MyDevTools + +- **Solo macOS** en las compilaciones publicadas hoy. +- **Los clientes de bases de datos son para el trabajo del día a día**, no un + reemplazo de una suite completa de DBA: sin diseñador visual de esquemas, sin + herramientas de migración. +- **Sin funciones de equipo.** Sin espacios de trabajo compartidos, sin + sincronización, sin colaboración. +- **Algunas herramientas necesitan la red por definición**: DNS, WHOIS, webhooks, + peticiones de API, conexiones a bases de datos. + +--- + +## 🤝 Contribuir + +Las contribuciones son bienvenidas: correcciones de errores, herramientas nuevas, +mejoras de UI, traducciones y documentación cuentan todas. Empieza por +[CONTRIBUTING.md](../../CONTRIBUTING.md); los issues con la etiqueta [`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +están acotados para quienes empiezan. + +Mejorar esta traducción, o un archivo de idioma en `apps/desktop-ui/messages/`, +no requiere Rust ni compilar nada. + +| | | +|---|---| +| 🐛 Reportar un error · ✨ Pedir una función | [Plantillas de issues](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 Hacer una pregunta | [Discusiones](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 Reportar una vulnerabilidad | [SECURITY.md](../../SECURITY.md), en privado, nunca en un issue público | +| 🗺️ Ver qué está planeado | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 Normas de la comunidad | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ Apoya el proyecto + +MyDevTools es gratis, no tiene plan de pago y nunca lo tendrá. Si te ahorra +tiempo, dale una estrella al repositorio, [patrocina en GitHub](https://github.com/sponsors/itsmeakhil) +o cuéntaselo a alguien de tu equipo. + +--- + +## 📄 Licencia + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html), consulta [LICENSE](../../LICENSE). + +

+ Hecho con ❤️ por Akhil y colaboradores +

diff --git a/docs/readme/readme_fr.md b/docs/readme/readme_fr.md new file mode 100644 index 00000000..a84121b7 --- /dev/null +++ b/docs/readme/readme_fr.md @@ -0,0 +1,219 @@ +

+ + + Logo MyDevTools + +

+ +

MyDevTools

+ +

+ Le poste de travail développeur hors ligne +

+ +

+ Plus de 80 outils pour développeurs, un client API, des clients SQL / MongoDB / Redis, du chiffrement
+ et des utilitaires de productivité — le tout exécuté localement sur votre machine. +

+ +

+ Gratuit · Open source · Hors ligne · Sans compte · Sans publicité +

+ +

+ Dernière version + CI + Téléchargements + Licence AGPL-3.0 + Étoiles GitHub +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ Télécharger • + 🌐 Site web • + 📚 Documentation • + 📋 Journal des modifications • + 🗺️ Feuille de route • + 🤝 Contribuer • + 💬 Discussions +

+ + + +> Ceci est une traduction du [README anglais](../../README.md), qui fait foi et +> peut être plus à jour. Les corrections sont les bienvenues — voir +> [Translations](../../CONTRIBUTING.md#translations). + +--- + +## Qu’est-ce que MyDevTools ? + +MyDevTools est une **application de bureau** qui remplace la pile d’onglets, de +sites ponctuels et d’applications mono-usage qu’un développeur ouvre chaque jour. +Formateurs, convertisseurs, générateurs, utilitaires de chiffrement, un client +API, des clients SQL / MongoDB / Redis, des notes, des extraits de code et un +coffre-fort d’identifiants — une seule application, un seul champ de recherche, +un seul raccourci clavier. + +Tout s’exécute sur votre machine. Il n’y a aucun serveur MyDevTools, aucun compte +et aucune synchronisation. + +| L’installation habituelle | MyDevTools | +|---|---| +| Une douzaine d’onglets de sites d’outils mono-usage | Une application de bureau, `⌘K` pour aller n’importe où | +| Des outils qui envoient vos données à un serveur pour les formater | Le traitement se fait sur votre machine | +| Inscriptions obligatoires et clés de licence | Aucun compte, aucune connexion, aucune activation | +| Des applications distinctes pour SQL, MongoDB et Redis | SQL + MongoDB + Redis + S3 au même endroit | +| Des offres payantes pour des utilitaires de base | Gratuit — tous les outils, toutes les fonctionnalités | +| Des outils propriétaires que vous ne pouvez pas auditer | AGPL-3.0, toute l’application est dans ce dépôt | + +--- + +## 📦 Installation + +| Plateforme | Comment | +|---|---| +| **macOS** (Apple Silicon + Intel) | [Télécharger le dernier `.dmg`](https://github.com/mydevtools-tech/mydevtools/releases/latest) — build universel, signé et notarisé, se met à jour depuis l’application | +| **Windows / Linux** | Pas encore publié. Le shell Tauri se compile sur les deux — voir [Compiler depuis les sources](../../README.md#%EF%B8%8F-building-from-source) et la [feuille de route](../../ROADMAP.md). Tester sur ces plateformes est une excellente première contribution | + +Ouvrez-la et travaillez : aucune inscription, aucune configuration, aucune clé API. + +--- + +## 🧰 Outils + +Plus de 80 outils, regroupés comme dans la barre latérale. La liste complète avec +les descriptions se trouve dans le [README anglais](../../README.md#-tools). + +| Catégorie | Exemples | +|---|---| +| 📝 **Formateurs et validateurs** | Formateur JSON, JSON Visualizer, Diff JSON, Générateur de schéma JSON, JSON to Code, Formateur YAML, Convertisseur de formats (JSON / YAML / TOML / XML), Formateur SQL, Formateur GraphQL, Aperçu Markdown, Comparateur de différences, Testeur d’expressions régulières | +| 🌐 **Réseau et API** | Client API (collections, environnements, authentification, gRPC, serveur de mock — sans les limites CORS d’un navigateur), cURL to Code, Testeur de webhook, Testeur WebSocket, Recherche DNS, Recherche Whois, Calculateur IP / sous-réseau, Codes d’état HTTP, User-Agent Parser | +| 🗄️ **Clients bases de données et stockage** | SQL Client (PostgreSQL, MySQL, MariaDB), Explorateur de base de données (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces) — pilotes Rust natifs, directement de votre machine à votre base de données | +| 🔐 **Sécurité et chiffrement** | Gestionnaire de mots de passe, Bac à sable chiffrement (AES-GCM), Décodeur JWT, Générateur de hash, Générateur HMAC, Bcrypt, Code TOTP / 2FA, Générateur de clés SSH / RSA, Décodeur de certificat / PEM, Gestionnaire d’environnement, Secret / clé API | +| 🔄 **Convertisseurs** | Base64, Image vers Base64, Encodeur / analyseur d’URL, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, Convertisseur de base, Convertisseur d’horodatage / de fuseaux, Convertisseur d’unités, Calculateur Chmod, Compteur de tokens LLM | +| ⚙️ **Générateurs** | UUID / ULID, Générateur de données fictives, Constructeur Cron, Générateur Docker Compose, Générateur .gitignore, Générateur de codes QR, Tableau Markdown, Lorem Ipsum | +| 🎨 **Médias et design** | Sélecteur de couleurs, Vérificateur de contraste, Générateur de dégradé CSS, Générateurs CSS, Compresseur d’images, Optimiseur SVG, Visionneuse et suppression EXIF, Générateur de favicon, Capture de code, Inspecteur de keycode | +| 📱 **Productivité** | Notes, Extraits de code, Tâches, Signets, Clés API, Salle de pause (2048, Sudoku, Snake, Minesweeper, Tetris) | + +Tout est accessible depuis une seule palette de commandes, en thème sombre ou +clair, dans 27 langues. + +--- + +## 🔒 Confidentialité par conception + +- **Aucun serveur MyDevTools.** Aucun backend auquel se connecter, aucun service + de synchronisation, aucun système de comptes. Les données saisies dans les + outils, les notes, les extraits, les tâches et les signets sont écrits dans une + base SQLCipher locale, chiffrée avec une clé conservée dans le trousseau du système. +- **Les identifiants sont chiffrés dans le coffre-fort.** Mots de passe de bases + de données, clés API et entrées du gestionnaire de mots de passe sont chiffrés + localement avec un mot de passe maître que vous seul connaissez. +- **Vous choisissez chaque connexion sortante.** L’application elle-même n’a + besoin d’aucun réseau, mais certains outils existent pour parler à *vos* + destinations : le client API envoie les requêtes que vous écrivez, les clients + de bases de données se connectent aux hôtes que vous configurez, les recherches + DNS / WHOIS interrogent les registres publics et le système de mise à jour + consulte les releases GitHub. Rien d’autre ne sort. +- **Statistiques d’usage optionnelles et anonymes.** Désactivées tant que vous ne + les activez pas. Une fois activées, deux événements (`app_started`, + `tool_opened`) sont envoyés avec un identifiant de session tournant, la version + de l’application et la langue. Aucun identifiant d’appareil, aucun chemin, rien + de ce que vous saisissez dans un outil. +- **Auditable.** AGPL-3.0. Les affirmations ci-dessus sont dans ce dépôt — allez les lire. + +--- + +## 🏗️ Architecture + +Une interface Next.js 16 / React 19 (`apps/desktop-ui`) dans un shell Tauri v2 +(`apps/desktop`, Rust). Le stockage repose sur SQLCipher, avec une clé issue du +trousseau du système ; les pilotes de bases de données, HTTP / gRPC et le serveur +de mock sont en Rust natif. Le site web (`apps/web`) sert uniquement à la +communication — les outils n’y fonctionnent pas. +Détails : [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md). + +--- + +## 🛠️ Compiler depuis les sources + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Nécessite Node.js ≥ 22, pnpm ≥ 9 et Rust stable. Aucune étape de configuration — +aucune clé API, aucun compte, aucun service. + +--- + +## Les limites de MyDevTools + +- **macOS uniquement** pour les builds publiés aujourd’hui. +- **Les clients de bases de données sont faits pour le travail quotidien**, pas + pour remplacer une suite DBA complète — pas de concepteur de schéma visuel, pas + d’outillage de migration. +- **Aucune fonctionnalité d’équipe.** Pas d’espaces partagés, pas de + synchronisation, pas de collaboration. +- **Certains outils ont besoin du réseau par définition** — DNS, WHOIS, webhooks, + requêtes API, connexions aux bases de données. + +--- + +## 🤝 Contribuer + +Les contributions sont les bienvenues — corrections de bugs, nouveaux outils, +finitions de l’interface, traductions et documentation comptent toutes. Commencez +par [CONTRIBUTING.md](../../CONTRIBUTING.md) ; les tickets étiquetés [`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +sont calibrés pour les nouveaux venus. + +Améliorer cette traduction, ou un fichier de langue dans +`apps/desktop-ui/messages/`, ne demande ni Rust ni compilation. + +| | | +|---|---| +| 🐛 Signaler un bug · ✨ Proposer une fonctionnalité | [Modèles de tickets](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 Poser une question | [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 Signaler une vulnérabilité | [SECURITY.md](../../SECURITY.md) — en privé, jamais dans un ticket public | +| 🗺️ Voir ce qui est prévu | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 Règles de la communauté | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ Soutenir le projet + +MyDevTools est gratuit, n’a aucune offre payante et n’en aura jamais. Si +l’application vous fait gagner du temps, mettez une étoile au dépôt, +[devenez sponsor sur GitHub](https://github.com/sponsors/itsmeakhil) +ou parlez-en à un collègue. + +--- + +## 📄 Licence + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — voir [LICENSE](../../LICENSE). + +

+ Fait avec ❤️ par Akhil et les contributeurs +

diff --git a/docs/readme/readme_hi.md b/docs/readme/readme_hi.md new file mode 100644 index 00000000..e8f93f66 --- /dev/null +++ b/docs/readme/readme_hi.md @@ -0,0 +1,212 @@ +

+ + + MyDevTools लोगो + +

+ +

MyDevTools

+ +

+ ऑफलाइन डेवलपर वर्कस्टेशन +

+ +

+ 80+ डेवलपर टूल्स, एक API क्लाइंट, SQL / MongoDB / Redis क्लाइंट, एन्क्रिप्शन
+ और प्रोडक्टिविटी यूटिलिटीज़ — सब कुछ आपकी अपनी मशीन पर लोकली चलता है। +

+ +

+ फ्री · ओपन सोर्स · ऑफलाइन · कोई अकाउंट नहीं · कोई ऐड नहीं +

+ +

+ नवीनतम रिलीज़ + CI + डाउनलोड + लाइसेंस AGPL-3.0 + GitHub स्टार्स +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ डाउनलोड • + 🌐 वेबसाइट • + 📚 डॉक्यूमेंटेशन • + 📋 चेंजलॉग • + 🗺️ रोडमैप • + 🤝 योगदान करें • + 💬 चर्चाएँ +

+ + + +> यह [अंग्रेज़ी README](../../README.md) का अनुवाद है। अंग्रेज़ी वर्शन ही +> आधिकारिक है और उसमें ज़्यादा नई जानकारी हो सकती है। सुधार का स्वागत है — देखें +> [Translations](../../CONTRIBUTING.md#translations)। + +--- + +## MyDevTools क्या है? + +MyDevTools एक **डेस्कटॉप एप्लिकेशन** है, जो उन दर्जनों टैब्स, एक-एक काम वाली +वेबसाइटों और छोटे-छोटे ऐप्स की जगह ले लेता है जिन्हें डेवलपर रोज़ खोलता है। +फ़ॉर्मेटर, कन्वर्टर, जनरेटर, क्रिप्टो यूटिलिटीज़, एक API क्लाइंट, SQL / MongoDB / +Redis क्लाइंट, नोट्स, स्निपेट्स और एक क्रेडेंशियल वॉल्ट — एक ऐप, एक सर्च बॉक्स, +एक कीबोर्ड शॉर्टकट। + +यह आपकी अपनी मशीन पर चलता है। न कोई MyDevTools सर्वर है, न अकाउंट, न सिंक। + +| आम तरीका | MyDevTools | +|---|---| +| एक-एक काम वाली टूल साइट्स के दर्जन भर टैब | एक डेस्कटॉप ऐप, कहीं भी पहुँचने के लिए `⌘K` | +| ऐसे टूल जो फ़ॉर्मेट करने के लिए आपका डेटा सर्वर पर भेजते हैं | प्रोसेसिंग आपकी अपनी मशीन पर होती है | +| साइन-अप की दीवारें और लाइसेंस की | कोई अकाउंट नहीं, कोई साइन-इन नहीं, कोई एक्टिवेशन नहीं | +| SQL, MongoDB और Redis के लिए अलग-अलग ऐप | SQL + MongoDB + Redis + S3 एक ही जगह | +| बेसिक यूटिलिटीज़ के लिए भी पेड प्लान | फ्री — हर टूल, हर फ़ीचर | +| क्लोज़्ड-सोर्स टूलिंग जिसका ऑडिट आप नहीं कर सकते | AGPL-3.0, पूरा ऐप इसी repo में है | + +--- + +## 📦 इंस्टॉल करें + +| प्लेटफ़ॉर्म | कैसे | +|---|---| +| **macOS** (Apple Silicon + Intel) | [नवीनतम `.dmg` डाउनलोड करें](https://github.com/mydevtools-tech/mydevtools/releases/latest) — यूनिवर्सल बिल्ड, साइन्ड और नोटराइज़्ड, ऐप में ही अपडेट हो जाता है | +| **Windows / Linux** | अभी पब्लिश नहीं हुआ है। Tauri शेल दोनों पर बिल्ड होता है — देखें [सोर्स से बिल्ड करना](../../README.md#%EF%B8%8F-building-from-source) और [रोडमैप](../../ROADMAP.md)। इन प्लेटफ़ॉर्म्स पर टेस्टिंग करना पहला योगदान देने का बढ़िया तरीका है | + +खोलिए और काम शुरू कीजिए: न साइन-अप, न कॉन्फ़िगरेशन, न API keys। + +--- + +## 🧰 टूल्स + +80+ टूल्स, उसी तरह ग्रुप किए गए जैसे साइडबार में दिखते हैं। विवरण के साथ पूरी +लिस्ट [अंग्रेज़ी README](../../README.md#-tools) में है। + +| कैटेगरी | उदाहरण | +|---|---| +| 📝 **फ़ॉर्मेटर और वैलिडेटर** | JSON Formatter, JSON Visualizer, JSON Diff, JSON Schema Generator, JSON to Code, YAML Formatter, Format Converter (JSON / YAML / TOML / XML), SQL Formatter, GraphQL Formatter, Markdown Preview, Diff Checker, Regex Tester | +| 🌐 **नेटवर्क और API** | API Client (कलेक्शन, एनवायरनमेंट, ऑथ, gRPC, mock server — ब्राउज़र वाली CORS पाबंदियों के बिना), cURL to Code, Webhook Tester, WebSocket Tester, DNS Lookup, Whois Lookup, IP / Subnet Calculator, HTTP Status Codes, User-Agent Parser | +| 🗄️ **डेटाबेस और स्टोरेज क्लाइंट** | SQL Client (PostgreSQL, MySQL, MariaDB), Database Explorer (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces) — नेटिव Rust ड्राइवर, सीधे आपकी मशीन से आपके डेटाबेस तक | +| 🔐 **सिक्योरिटी और क्रिप्टो** | Password Manager, Encryption Playground (AES-GCM), JWT Decoder, Hash Generator, HMAC Generator, Bcrypt, TOTP / 2FA Generator, SSH / RSA Key Generator, Certificate / PEM Decoder, Environment Manager, Secret / API Key Generator | +| 🔄 **कन्वर्टर** | Base64, Image to Base64, URL Encoder / Parser, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, Number Base Converter, Timestamp / Timezone Converter, Unit Converter, Chmod Calculator, LLM Token Counter | +| ⚙️ **जनरेटर** | UUID / ULID, Mock Data Generator, Cron Builder, Docker Compose Generator, .gitignore Generator, QR Code Generator, Markdown Table Generator, Lorem Ipsum | +| 🎨 **मीडिया और डिज़ाइन** | Color Picker, Contrast Checker, CSS Gradient Builder, CSS Generators, Image Compressor, SVG Optimizer, EXIF Viewer & Remover, Favicon Generator, Code Screenshot, Keycode Inspector | +| 📱 **प्रोडक्टिविटी** | Notes, Code Snippets, Tasks, Bookmarks, API Keys, Break Room (2048, Sudoku, Snake, Minesweeper, Tetris) | + +सब कुछ एक ही कमांड पैलेट से खोजा जा सकता है — डार्क या लाइट मोड में, 27 +भाषाओं में। + +--- + +## 🔒 डिज़ाइन से ही प्राइवेट + +- **कोई MyDevTools सर्वर नहीं।** न कोई बैकएंड जिसमें साइन इन करना पड़े, न सिंक + सर्विस, न अकाउंट सिस्टम। टूल इनपुट, नोट्स, स्निपेट्स, टास्क और बुकमार्क एक लोकल + SQLCipher डेटाबेस में लिखे जाते हैं, जो OS keychain में रखी key से एन्क्रिप्टेड है। +- **क्रेडेंशियल वॉल्ट में एन्क्रिप्टेड रहते हैं।** डेटाबेस पासवर्ड, API keys और + password manager की एंट्रीज़ एक मास्टर पासवर्ड से लोकली एन्क्रिप्ट होती हैं, जो + सिर्फ़ आपको पता है। +- **हर आउटबाउंड कनेक्शन आपकी मर्ज़ी से।** ऐप को खुद नेटवर्क की ज़रूरत नहीं, लेकिन + कुछ टूल बने ही *आपके* डेस्टिनेशन से बात करने के लिए हैं: API क्लाइंट वही + रिक्वेस्ट भेजता है जो आप लिखते हैं, डेटाबेस क्लाइंट उन्हीं होस्ट से जुड़ते हैं जो + आप कॉन्फ़िगर करते हैं, DNS / WHOIS lookup पब्लिक रजिस्ट्री से पूछते हैं, और अपडेटर + GitHub releases चेक करता है। इसके अलावा कुछ भी बाहर नहीं जाता। +- **ऑप्शनल, एनॉनिमस यूसेज स्टैट्स।** जब तक आप खुद चालू न करें, बंद रहते हैं। चालू + होने पर दो इवेंट (`app_started`, `tool_opened`) एक बदलती हुई session id, ऐप वर्शन + और locale के साथ भेजे जाते हैं। न कोई device id, न कोई path, न टूल में टाइप की गई + कोई चीज़। +- **ऑडिट किया जा सकता है।** AGPL-3.0। ऊपर लिखी हर बात इसी repo में मौजूद है — खुद + पढ़कर देखिए। + +--- + +## 🏗️ आर्किटेक्चर + +Tauri v2 शेल (`apps/desktop`, Rust) के अंदर एक Next.js 16 / React 19 UI +(`apps/desktop-ui`)। स्टोरेज SQLCipher है, जिसकी key OS keychain से आती है; डेटाबेस +ड्राइवर, HTTP / gRPC और mock server नेटिव Rust में हैं। वेबसाइट (`apps/web`) सिर्फ़ +मार्केटिंग के लिए है — टूल वहाँ नहीं चलते। +विस्तार से: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md)। + +--- + +## 🛠️ सोर्स से बिल्ड करना + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +इसके लिए Node.js ≥ 22, pnpm ≥ 9 और stable Rust चाहिए। कोई कॉन्फ़िगरेशन स्टेप नहीं — +न API keys, न अकाउंट, न कोई सर्विस। + +--- + +## MyDevTools कहाँ तक नहीं जाता + +- फ़िलहाल पब्लिश बिल्ड **सिर्फ़ macOS** के लिए हैं। +- **डेटाबेस क्लाइंट रोज़मर्रा के काम के लिए हैं**, किसी पूरे DBA सूट का विकल्प नहीं + — न विज़ुअल स्कीमा डिज़ाइनर है, न माइग्रेशन टूलिंग। +- **कोई टीम फ़ीचर नहीं।** न शेयर्ड वर्कस्पेस, न सिंक, न कोलैबोरेशन। +- **कुछ टूल्स को नेटवर्क चाहिए ही होता है** — DNS, WHOIS, webhooks, API रिक्वेस्ट, + डेटाबेस कनेक्शन। + +--- + +## 🤝 योगदान + +योगदान का स्वागत है — बग फिक्स, नए टूल, UI पॉलिश, अनुवाद और डॉक्यूमेंटेशन, सब +मायने रखते हैं। शुरुआत [CONTRIBUTING.md](../../CONTRIBUTING.md) से करें; +[`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +लेबल वाले issues नए लोगों के लिए ही रखे गए हैं। + +इस अनुवाद को बेहतर बनाने के लिए, या `apps/desktop-ui/messages/` में किसी locale +फ़ाइल को सुधारने के लिए, न Rust चाहिए और न बिल्ड। + +| | | +|---|---| +| 🐛 बग रिपोर्ट करें · ✨ फ़ीचर की माँग करें | [Issue templates](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 कोई सवाल पूछें | [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 कोई सुरक्षा खामी बताएँ | [SECURITY.md](../../SECURITY.md) — निजी तौर पर, कभी भी पब्लिक issue में नहीं | +| 🗺️ आगे क्या प्लान है, देखें | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 कम्युनिटी के नियम | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ प्रोजेक्ट को सपोर्ट करें + +MyDevTools फ्री है, इसका कोई पेड प्लान नहीं है और कभी होगा भी नहीं। अगर इससे आपका +समय बचता है, तो repository को स्टार करें, +[GitHub पर स्पॉन्सर करें](https://github.com/sponsors/itsmeakhil), या किसी साथी +डेवलपर को इसके बारे में बताएँ। + +--- + +## 📄 लाइसेंस + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — देखें [LICENSE](../../LICENSE)। + +

+ ❤️ के साथ बनाया Akhil और योगदानकर्ताओं ने +

diff --git a/docs/readme/readme_ja.md b/docs/readme/readme_ja.md new file mode 100644 index 00000000..e5f92af8 --- /dev/null +++ b/docs/readme/readme_ja.md @@ -0,0 +1,214 @@ +

+ + + MyDevTools ロゴ + +

+ +

MyDevTools

+ +

+ オフラインで動く開発者ワークステーション +

+ +

+ 80 以上の開発者ツール、API クライアント、SQL / MongoDB / Redis クライアント、
+ 暗号化ツール、生産性ユーティリティ — すべてあなたのマシン上でローカルに動作します。 +

+ +

+ 無料 · オープンソース · オフライン · アカウント不要 · 広告なし +

+ +

+ 最新リリース + CI + ダウンロード数 + ライセンス AGPL-3.0 + GitHub スター +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ ダウンロード • + 🌐 ウェブサイト • + 📚 ドキュメント • + 📋 変更履歴 • + 🗺️ ロードマップ • + 🤝 コントリビュート • + 💬 ディスカッション +

+ + + +> これは [英語版 README](../../README.md) の翻訳です。英語版が正式版であり、 +> より新しい内容を含んでいる場合があります。修正は歓迎します — +> [Translations](../../CONTRIBUTING.md#translations) をご覧ください。 + +--- + +## MyDevTools とは? + +MyDevTools は、開発者が毎日開く大量のタブ、単機能のウェブサイト、用途ごとのアプリ +をまとめて置き換える**デスクトップアプリケーション**です。フォーマッター、 +コンバーター、ジェネレーター、暗号ユーティリティ、API クライアント、 +SQL / MongoDB / Redis クライアント、ノート、スニペット、認証情報の保管庫 — +1 つのアプリ、1 つの検索ボックス、1 つのキーボードショートカットで完結します。 + +動作するのはあなたのマシン上です。MyDevTools のサーバーも、アカウントも、同期もありません。 + +| よくある構成 | MyDevTools | +|---|---| +| 単機能ツールサイトのタブが十数個 | デスクトップアプリ 1 つ、`⌘K` でどこへでも | +| 整形するためにデータをサーバーへ送信するツール | 処理はあなたのマシン上で完結 | +| 会員登録の壁とライセンスキー | アカウントなし、サインインなし、アクティベーションなし | +| SQL・MongoDB・Redis で別々のアプリ | SQL + MongoDB + Redis + S3 を 1 か所で | +| 基本的なユーティリティにも有料プラン | 無料 — すべてのツール、すべての機能 | +| 監査できないクローズドソースのツール | AGPL-3.0、アプリ全体がこのリポジトリにあります | + +--- + +## 📦 インストール + +| プラットフォーム | 方法 | +|---|---| +| **macOS**(Apple Silicon + Intel) | [最新の `.dmg` をダウンロード](https://github.com/mydevtools-tech/mydevtools/releases/latest) — ユニバーサルビルド、署名・公証済み、アプリ内で自動更新 | +| **Windows / Linux** | まだ公開していません。Tauri シェルはどちらでもビルドできます — [ソースからのビルド](../../README.md#%EF%B8%8F-building-from-source) と [ロードマップ](../../ROADMAP.md) を参照してください。これらのプラットフォームでの動作確認は、最初のコントリビューションに最適です | + +開いたらすぐに使えます。会員登録も設定も API キーも不要です。 + +--- + +## 🧰 ツール + +80 以上のツールを、サイドバーと同じグループに分けて掲載しています。説明付きの +完全な一覧は [英語版 README](../../README.md#-tools) にあります。 + +| カテゴリ | 例 | +|---|---| +| 📝 **フォーマッター & バリデーター** | JSON フォーマッター、JSON Visualizer、JSON 差分、JSONスキーマジェネレーター、JSON to Code、YAMLフォーマッター、フォーマット変換(JSON / YAML / TOML / XML)、SQL Formatter、GraphQL フォーマッター、Markdownプレビュー、Diff checker、Regex Tester | +| 🌐 **ネットワーク & API** | APIクライアント(コレクション、環境、認証、gRPC、モックサーバー — ブラウザの CORS 制限なし)、cURL to Code、Webhook テスター、WebSocket テスター、DNS ルックアップ、Whois 検索、IP/サブネット計算、HTTPステータスコード、User-Agent Parser | +| 🗄️ **データベース & ストレージクライアント** | SQL Client(PostgreSQL、MySQL、MariaDB)、データベースエクスプローラー(MongoDB)、Redis Commander、S3 Drive(AWS S3、DigitalOcean Spaces) — ネイティブ Rust ドライバーで、あなたのマシンからデータベースへ直接つながります | +| 🔐 **セキュリティ & 暗号** | パスワードマネージャー、暗号化プレイグラウンド(AES-GCM)、JWTデコーダー、ハッシュ生成、HMACジェネレーター、Bcrypt、TOTP / 2FA コード、SSH / RSAキージェネレーター、証明書 / PEM デコーダ、環境変数マネージャー、シークレット / APIキー | +| 🔄 **コンバーター** | Base64、画像をBase64に変換、URL Encoder / URL パーサー、Escape / Encode、String Case Converter、String Inspector、Line Sort & Dedupe、CSV / Excel ↔ JSON、基数変換、Timestamp Converter / タイムゾーン変換、単位変換器、Chmod 計算機、LLM トークンカウンター | +| ⚙️ **ジェネレーター** | UUID / ULID、モックデータジェネレーター、Cron Builder、Docker Compose ジェネレーター、.gitignore ジェネレーター、QRコード生成、Markdown テーブル、Lorem Ipsum | +| 🎨 **メディア & デザイン** | Color Picker、コントラストチェッカー、CSS グラデーション ビルダー、CSS ジェネレーター、画像圧縮、SVG 最適化、EXIF ビューアー & リムーバー、Favicon ジェネレーター、コードスクリーンショット、キーコードインスペクター | +| 📱 **生産性** | Notes、コードスニペット、Tasks、ブックマーク、API Keys、休憩室(2048、Sudoku、Snake、Minesweeper、Tetris) | + +すべて 1 つのコマンドパレットから検索でき、ダーク / ライトモード、27 言語に対応しています。 + +--- + +## 🔒 設計段階からのプライバシー + +- **MyDevTools のサーバーはありません。** サインインするバックエンドも、同期 + サービスも、アカウントの仕組みもありません。ツールの入力、ノート、スニペット、 + タスク、ブックマークはローカルの SQLCipher データベースに書き込まれ、OS の + キーチェーンが保持する鍵で暗号化されます。 +- **認証情報は保管庫で暗号化されます。** データベースのパスワード、API キー、 + パスワードマネージャーの項目は、あなただけが知るマスターパスワードでローカルに + 暗号化されます。 +- **外部への通信はすべてあなたが選びます。** アプリ自体はネットワークを必要と + しませんが、一部のツールは *あなたの* 接続先と通信するために存在します。API + クライアントはあなたが書いたリクエストを送信し、データベースクライアントは + あなたが設定したホストへ接続し、DNS / WHOIS ルックアップは公開レジストリへ + 問い合わせ、アップデーターは GitHub のリリースを確認します。それ以外は何も + 外に出ません。 +- **利用統計は任意・匿名です。** 自分でオンにしない限り無効です。オンの場合は + 2 つのイベント(`app_started`、`tool_opened`)が、ローテーションするセッション + ID、アプリのバージョン、ロケールとともに送信されます。デバイス ID も、パスも、 + ツールに入力した内容も送りません。 +- **監査できます。** AGPL-3.0。ここに書いた内容はすべてこのリポジトリにあります — + 実際に読んで確かめてください。 + +--- + +## 🏗️ アーキテクチャ + +Tauri v2 シェル(`apps/desktop`、Rust)の中で動く Next.js 16 / React 19 の UI +(`apps/desktop-ui`)です。ストレージは OS キーチェーン由来の鍵で保護された +SQLCipher、データベースドライバー、HTTP / gRPC、モックサーバーはネイティブ Rust +です。ウェブサイト(`apps/web`)はマーケティング専用で、ツールはそこでは動きません。 +詳細: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md)。 + +--- + +## 🛠️ ソースからのビルド + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Node.js ≥ 22、pnpm ≥ 9、安定版の Rust が必要です。設定作業はありません — API +キーもアカウントもサービスも不要です。 + +--- + +## MyDevTools がカバーしない範囲 + +- 公開しているビルドは今のところ **macOS のみ** です。 +- **データベースクライアントは日常業務向け**であり、本格的な DBA スイートの + 代わりにはなりません — ビジュアルなスキーマデザイナーもマイグレーションツール + もありません。 +- **チーム向け機能はありません。** 共有ワークスペースも、同期も、共同編集も + ありません。 +- **性質上ネットワークが必要なツールもあります** — DNS、WHOIS、Webhook、API + リクエスト、データベース接続。 + +--- + +## 🤝 コントリビューション + +コントリビューションを歓迎します — バグ修正、新しいツール、UI の改善、翻訳、 +ドキュメント、どれも大歓迎です。まずは [CONTRIBUTING.md](../../CONTRIBUTING.md) +から。[`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +ラベルの付いた issue は、初めての方向けに範囲を絞ってあります。 + +この翻訳や `apps/desktop-ui/messages/` のロケールファイルの改善には、Rust も +ビルドも必要ありません。 + +| | | +|---|---| +| 🐛 バグを報告 · ✨ 機能をリクエスト | [Issue テンプレート](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 質問する | [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 脆弱性を報告 | [SECURITY.md](../../SECURITY.md) — 公開 issue ではなく、非公開で | +| 🗺️ 今後の予定を見る | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 コミュニティの行動指針 | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ プロジェクトを支援する + +MyDevTools は無料で、有料プランはなく、今後も作りません。時間の節約になったら、 +リポジトリにスターを付ける、[GitHub でスポンサーになる](https://github.com/sponsors/itsmeakhil)、 +チームメイトに教える — どれでも力になります。 + +--- + +## 📄 ライセンス + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — [LICENSE](../../LICENSE) を参照してください。 + +

+ Akhilコントリビューター が ❤️ を込めて作りました +

diff --git a/docs/readme/readme_ko.md b/docs/readme/readme_ko.md new file mode 100644 index 00000000..b10bfe99 --- /dev/null +++ b/docs/readme/readme_ko.md @@ -0,0 +1,207 @@ +

+ + + MyDevTools 로고 + +

+ +

MyDevTools

+ +

+ 오프라인 개발자 워크스테이션 +

+ +

+ 80개가 넘는 개발자 도구, API 클라이언트, SQL / MongoDB / Redis 클라이언트, 암호화
+ 및 생산성 유틸리티 — 모두 내 컴퓨터에서 로컬로 실행됩니다. +

+ +

+ 무료 · 오픈 소스 · 오프라인 · 계정 불필요 · 광고 없음 +

+ +

+ 최신 릴리스 + CI + 다운로드 수 + 라이선스 AGPL-3.0 + GitHub 스타 +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ 다운로드 • + 🌐 웹사이트 • + 📚 문서 • + 📋 변경 내역 • + 🗺️ 로드맵 • + 🤝 기여하기 • + 💬 토론 +

+ + + +> 이 문서는 [영문 README](../../README.md)의 번역본입니다. 영문판이 원본이며 더 +> 최신일 수 있습니다. 수정 제안은 언제든 환영합니다 — +> [Translations](../../CONTRIBUTING.md#translations)를 참고하세요. + +--- + +## MyDevTools란? + +MyDevTools는 개발자가 매일 열어 두는 수많은 탭, 일회성 웹사이트, 단일 목적 앱을 +대체하는 **데스크톱 애플리케이션**입니다. 포매터, 변환기, 생성기, 암호화 +유틸리티, API 클라이언트, SQL / MongoDB / Redis 클라이언트, 노트, 스니펫, 자격 +증명 볼트까지 — 앱 하나, 검색창 하나, 단축키 하나로 끝납니다. + +모든 처리는 내 컴퓨터에서 이루어집니다. MyDevTools 서버도, 계정도, 동기화도 없습니다. + +| 일반적인 환경 | MyDevTools | +|---|---| +| 단일 기능 도구 사이트 탭 십여 개 | 데스크톱 앱 하나, `⌘K`로 어디든 이동 | +| 포맷하겠다고 데이터를 서버로 업로드하는 도구 | 모든 처리는 내 컴퓨터에서 | +| 가입 장벽과 라이선스 키 | 계정 없음, 로그인 없음, 활성화 없음 | +| SQL, MongoDB, Redis마다 별도 앱 | SQL + MongoDB + Redis + S3를 한곳에서 | +| 기본 유틸리티에도 유료 플랜 | 무료 — 모든 도구, 모든 기능 | +| 감사할 수 없는 비공개 소스 도구 | AGPL-3.0, 앱 전체가 이 저장소에 | + +--- + +## 📦 설치 + +| 플랫폼 | 방법 | +|---|---| +| **macOS** (Apple Silicon + Intel) | [최신 `.dmg` 다운로드](https://github.com/mydevtools-tech/mydevtools/releases/latest) — 유니버설 빌드, 서명 및 공증 완료, 앱 내에서 자동 업데이트 | +| **Windows / Linux** | 아직 배포하지 않았습니다. Tauri 셸은 두 플랫폼 모두에서 빌드됩니다 — [소스에서 빌드하기](../../README.md#%EF%B8%8F-building-from-source)와 [로드맵](../../ROADMAP.md)을 참고하세요. 이 플랫폼에서의 테스트는 첫 기여로 아주 좋습니다 | + +실행하고 바로 작업을 시작하면 됩니다. 가입도, 설정도, API 키도 필요 없습니다. + +--- + +## 🧰 도구 + +사이드바와 같은 방식으로 묶은 80개 이상의 도구입니다. 설명이 포함된 전체 목록은 +[영문 README](../../README.md#-tools)에 있습니다. + +| 분류 | 예시 | +|---|---| +| 📝 **포매터 및 검증기** | JSON 포맷터, JSON Visualizer, JSON 비교, JSON 스키마 생성기, JSON to Code, YAML 포매터, 포맷 변환기 (JSON / YAML / TOML / XML), SQL Formatter, GraphQL 포매터, 마크다운 미리보기, Diff checker, Regex Tester | +| 🌐 **네트워크 및 API** | API 클라이언트 (컬렉션, 환경, 인증, gRPC, 목 서버 — 브라우저 CORS 제한 없음), cURL to Code, Webhook 테스터, WebSocket 테스터, DNS 조회, Whois 조회, IP / 서브넷 계산기, HTTP 상태 코드, User-Agent Parser | +| 🗄️ **데이터베이스 및 스토리지 클라이언트** | SQL Client (PostgreSQL, MySQL, MariaDB), 데이터베이스 탐색기 (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces) — 네이티브 Rust 드라이버로 내 컴퓨터에서 데이터베이스까지 바로 연결 | +| 🔐 **보안 및 암호화** | 비밀번호 관리자, 암호화 연습장 (AES-GCM), JWT 디코더, 해시 생성기, HMAC 생성기, Bcrypt, TOTP / 2FA 코드, SSH / RSA 키 생성기, 인증서 / PEM 디코더, 환경 변수 관리자, 비밀 / API 키 생성기 | +| 🔄 **변환기** | Base64, 이미지를 Base64로, URL Encoder / 파서, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, 진법 변환기, Timestamp / 시간대 변환기, 단위 변환기, Chmod 계산기, LLM 토큰 카운터 | +| ⚙️ **생성기** | UUID / ULID, 모의 데이터 생성기, Cron Builder, Docker Compose 생성기, .gitignore 생성기, QR 코드 생성기, Markdown 표 생성기, Lorem Ipsum | +| 🎨 **미디어 및 디자인** | Color Picker, 대비 검사기, CSS 그라디언트 빌더, CSS 생성기, 이미지 압축, SVG 최적화, EXIF 뷰어 및 제거, Favicon 생성기, 코드 스크린샷, 키코드 검사기 | +| 📱 **생산성** | Notes, 코드 스니펫, Tasks, 북마크, API Keys, 휴게실 (2048, Sudoku, Snake, Minesweeper, Tetris) | + +모든 도구는 하나의 명령 팔레트에서 검색할 수 있으며, 다크/라이트 모드와 27개 +언어를 지원합니다. + +--- + +## 🔒 설계에서부터 프라이버시 + +- **MyDevTools 서버가 없습니다.** 로그인할 백엔드도, 동기화 서비스도, 계정 + 시스템도 없습니다. 도구 입력값, 노트, 스니펫, 작업, 북마크는 OS 키체인에 + 보관된 키로 암호화된 로컬 SQLCipher 데이터베이스에 저장됩니다. +- **자격 증명은 볼트로 암호화됩니다.** 데이터베이스 비밀번호, API 키, 비밀번호 + 관리자 항목은 본인만 아는 마스터 비밀번호로 로컬에서 암호화됩니다. +- **모든 외부 연결은 사용자가 결정합니다.** 앱 자체는 네트워크가 필요 없지만, + 일부 도구는 *사용자가 지정한* 대상과 통신하기 위해 존재합니다. API 클라이언트는 + 사용자가 작성한 요청을 보내고, 데이터베이스 클라이언트는 사용자가 설정한 호스트에 + 연결하며, DNS / WHOIS 조회는 공개 레지스트리에 질의하고, 업데이터는 GitHub + 릴리스를 확인합니다. 그 외에 나가는 것은 없습니다. +- **사용 통계는 선택 사항이며 익명입니다.** 켜지 않으면 꺼져 있습니다. 켜면 두 + 가지 이벤트(`app_started`, `tool_opened`)가 순환 세션 id, 앱 버전, 로케일과 함께 + 전송됩니다. 기기 id도, 경로도, 도구에 입력한 내용도 포함되지 않습니다. +- **검증할 수 있습니다.** AGPL-3.0. 위 내용은 모두 이 저장소 안에 있으니 직접 확인해 보세요. + +--- + +## 🏗️ 아키텍처 + +Tauri v2 셸(`apps/desktop`, Rust) 안에서 동작하는 Next.js 16 / React 19 +UI(`apps/desktop-ui`)입니다. 저장소는 OS 키체인에서 키를 받는 SQLCipher이며, +데이터베이스 드라이버, HTTP / gRPC, 목 서버는 네이티브 Rust로 구현되어 있습니다. +웹사이트(`apps/web`)는 마케팅 전용으로, 도구는 그곳에서 실행되지 않습니다. +자세한 내용: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md). + +--- + +## 🛠️ 소스에서 빌드하기 + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Node.js ≥ 22, pnpm ≥ 9, 그리고 stable Rust가 필요합니다. 설정 단계는 없습니다 — +API 키도, 계정도, 외부 서비스도 필요 없습니다. + +--- + +## MyDevTools가 다루지 않는 것 + +- 현재 배포되는 빌드는 **macOS 전용**입니다. +- **데이터베이스 클라이언트는 일상 작업용**이며, 완전한 DBA 도구 모음을 대체하지 + 않습니다 — 시각적 스키마 디자이너나 마이그레이션 도구는 없습니다. +- **팀 기능은 없습니다.** 공유 워크스페이스도, 동기화도, 협업 기능도 없습니다. +- **일부 도구는 본질적으로 네트워크가 필요합니다** — DNS, WHOIS, 웹훅, API + 요청, 데이터베이스 연결이 그렇습니다. + +--- + +## 🤝 기여하기 + +기여는 언제나 환영합니다 — 버그 수정, 새 도구, UI 다듬기, 번역, 문서 모두 +좋습니다. [CONTRIBUTING.md](../../CONTRIBUTING.md)부터 시작하세요. +[`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +라벨이 붙은 이슈는 처음 기여하는 분에게 맞게 범위가 정리되어 있습니다. + +이 번역이나 `apps/desktop-ui/messages/`의 로케일 파일을 개선하는 데에는 Rust도, +빌드도 필요하지 않습니다. + +| | | +|---|---| +| 🐛 버그 신고 · ✨ 기능 제안 | [이슈 템플릿](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 질문하기 | [Discussions](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 취약점 신고 | [SECURITY.md](../../SECURITY.md) — 공개 이슈가 아니라 비공개로 | +| 🗺️ 계획 확인 | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 커뮤니티 규범 | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ 프로젝트 응원하기 + +MyDevTools는 무료이며, 유료 플랜은 없고 앞으로도 없습니다. 시간을 아껴 주었다면 +저장소에 스타를 누르거나, [GitHub에서 후원](https://github.com/sponsors/itsmeakhil)하거나, +동료에게 알려 주세요. + +--- + +## 📄 라이선스 + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — [LICENSE](../../LICENSE)를 참고하세요. + +

+ Akhil기여자들이 ❤️를 담아 만들었습니다 +

diff --git a/docs/readme/readme_pt-BR.md b/docs/readme/readme_pt-BR.md new file mode 100644 index 00000000..fa21ca3c --- /dev/null +++ b/docs/readme/readme_pt-BR.md @@ -0,0 +1,211 @@ +

+ + + Logo do MyDevTools + +

+ +

MyDevTools

+ +

+ A estação de trabalho offline do desenvolvedor +

+ +

+ Mais de 80 ferramentas de desenvolvimento, um cliente de API, clientes SQL / MongoDB / Redis,
+ criptografia e utilitários de produtividade — tudo rodando localmente na sua máquina. +

+ +

+ Grátis · Código aberto · Offline · Sem conta · Sem anúncios +

+ +

+ Versão mais recente + CI + Downloads + Licença AGPL-3.0 + Estrelas no GitHub +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ Baixar • + 🌐 Site • + 📚 Documentação • + 📋 Changelog • + 🗺️ Roadmap • + 🤝 Contribuir • + 💬 Discussões +

+ + + +> Esta é uma tradução do [README em inglês](../../README.md), que é a versão +> canônica e pode estar mais atualizada. Correções são bem-vindas — veja +> [Traduções](../../CONTRIBUTING.md#translations). + +--- + +## O que é o MyDevTools? + +O MyDevTools é um **aplicativo desktop** que substitui a pilha de abas, sites +avulsos e apps de propósito único que um desenvolvedor abre todo dia. +Formatadores, conversores, geradores, utilitários de criptografia, um cliente de +API, clientes SQL / MongoDB / Redis, notas, snippets e um cofre de credenciais — +um app, um campo de busca, um atalho de teclado. + +Ele roda na sua máquina. Não existe servidor do MyDevTools, nem conta, nem sincronização. + +| O setup de sempre | MyDevTools | +|---|---| +| Uma dúzia de abas de sites de ferramenta única | Um app desktop, `⌘K` para ir a qualquer lugar | +| Ferramentas que enviam seu payload a um servidor só para formatá-lo | O processamento acontece na sua máquina | +| Muros de cadastro e chaves de licença | Sem conta, sem login, sem ativação | +| Apps separados para SQL, MongoDB e Redis | SQL + MongoDB + Redis + S3 no mesmo lugar | +| Planos pagos para utilitários básicos | Grátis — todas as ferramentas, todos os recursos | +| Ferramentas de código fechado que você não pode auditar | AGPL-3.0, o app inteiro está neste repositório | + +--- + +## 📦 Instalação + +| Plataforma | Como | +|---|---| +| **macOS** (Apple Silicon + Intel) | [Baixe o `.dmg` mais recente](https://github.com/mydevtools-tech/mydevtools/releases/latest) — build universal, assinado e notarizado, com atualização dentro do próprio app | +| **Windows / Linux** | Ainda não publicados. O shell Tauri compila nos dois — veja [Compilar a partir do código-fonte](../../README.md#%EF%B8%8F-building-from-source) e o [roadmap](../../ROADMAP.md). Testar nessas plataformas é uma ótima primeira contribuição | + +Abra e comece a trabalhar: sem cadastro, sem configuração, sem chaves de API. + +--- + +## 🧰 Ferramentas + +Mais de 80 ferramentas, agrupadas do mesmo jeito que a barra lateral agrupa. A +lista completa com descrições está no [README em inglês](../../README.md#-tools). + +| Categoria | Exemplos | +|---|---| +| 📝 **Formatadores e validadores** | Formatador JSON, JSON Visualizer, Diff JSON, Gerador de esquema JSON, JSON to Code, Formatador YAML, Conversor de formatos (JSON / YAML / TOML / XML), SQL Formatter, Formatador GraphQL, Pré-visualização Markdown, Diff checker, Regex Tester | +| 🌐 **Rede e API** | Cliente API (coleções, ambientes, autenticação, gRPC, mock server — sem limites de CORS do navegador), cURL to Code, Testador de Webhook, Testador de WebSocket, Pesquisa DNS, Consulta Whois, Calculadora IP / sub-rede, Códigos de status HTTP, User-Agent Parser | +| 🗄️ **Clientes de banco de dados e armazenamento** | SQL Client (PostgreSQL, MySQL, MariaDB), Explorador de banco de dados (MongoDB), Redis Commander, S3 Drive (AWS S3, DigitalOcean Spaces) — drivers Rust nativos, direto da sua máquina para o seu banco | +| 🔐 **Segurança e criptografia** | Gerenciador de Senhas, Laboratório de criptografia (AES-GCM), Decodificador JWT, Gerador de hash, Gerador HMAC, Bcrypt, Código TOTP / 2FA, Gerador de chaves SSH / RSA, Decodificador de certificado / PEM, Gerenciador de ambientes, Segredo / chave de API | +| 🔄 **Conversores** | Base64, Imagem para Base64, URL Encoder / Analisador de URL, Escape / Encode, String Case Converter, String Inspector, Line Sort & Dedupe, CSV / Excel ↔ JSON, Conversor de base, Conversor de Timestamp / Fuso Horário, Conversor de Unidades, Calculadora Chmod, Contador de Tokens de LLM | +| ⚙️ **Geradores** | UUID / ULID, Gerador de dados mock, Cron Builder, Gerador Docker Compose, Gerador .gitignore, Gerador de QR Code, Tabela Markdown, Lorem Ipsum | +| 🎨 **Mídia e design** | Color Picker, Verificador de contraste, Construtor de gradiente CSS, Geradores CSS, Compressor de imagens, Otimizador SVG, Visualizador EXIF e removedor, Gerador de Favicon, Captura de Código, Inspetor de Keycode | +| 📱 **Produtividade** | Notes, Trechos de código, Tasks, Favoritos, API Keys, Sala de descanso (2048, Sudoku, Snake, Minesweeper, Tetris) | + +Tudo é pesquisável a partir de uma única paleta de comandos, em tema escuro ou +claro, em 27 idiomas. + +--- + +## 🔒 Privacidade por design + +- **Nenhum servidor do MyDevTools.** Não há backend para fazer login, serviço de + sincronização nem sistema de contas. Entradas das ferramentas, notas, snippets, + tarefas e favoritos são gravados em um banco SQLCipher local, criptografado com + uma chave guardada no keychain do sistema operacional. +- **Credenciais ficam criptografadas no cofre.** Senhas de banco de dados, chaves + de API e entradas do gerenciador de senhas são criptografadas localmente com uma + senha mestra que só você conhece. +- **Você escolhe cada conexão de saída.** O app em si não precisa de rede, mas + algumas ferramentas existem para falar com *os seus* destinos: o cliente de API + envia as requisições que você escreve, os clientes de banco conectam nos hosts + que você configura, as consultas DNS / WHOIS batem em registros públicos e o + atualizador verifica as releases do GitHub. Nada além disso sai. +- **Estatísticas de uso opcionais e anônimas.** Desligadas até você ativar. Quando + ativadas, dois eventos (`app_started`, `tool_opened`) são enviados com um id de + sessão rotativo, a versão do app e o idioma. Sem id de dispositivo, sem caminhos, + nada do que você digita em uma ferramenta. +- **Auditável.** AGPL-3.0. As afirmações acima estão neste repositório — leia. + +--- + +## 🏗️ Arquitetura + +Uma UI Next.js 16 / React 19 (`apps/desktop-ui`) dentro de um shell Tauri v2 +(`apps/desktop`, Rust). O armazenamento é SQLCipher com chave vinda do keychain do +sistema; os drivers de banco, HTTP / gRPC e o mock server são Rust nativo. O site +(`apps/web`) é só marketing — as ferramentas não rodam lá. +Detalhes: [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md). + +--- + +## 🛠️ Compilar a partir do código-fonte + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +Requer Node.js ≥ 22, pnpm ≥ 9 e Rust estável. Nenhuma etapa de configuração — sem +chaves de API, sem contas, sem serviços. + +--- + +## Até onde o MyDevTools vai + +- **Só macOS** nas builds publicadas hoje. +- **Os clientes de banco são para o trabalho do dia a dia**, não um substituto de + uma suíte completa de DBA — sem designer visual de schema, sem ferramentas de migração. +- **Sem recursos de equipe.** Sem workspaces compartilhados, sem sincronização, sem colaboração. +- **Algumas ferramentas precisam de rede por definição** — DNS, WHOIS, webhooks, + requisições de API, conexões de banco de dados. + +--- + +## 🤝 Contribuindo + +Contribuições são bem-vindas — correções de bugs, novas ferramentas, ajustes de +UI, traduções e documentação, tudo conta. Comece pelo [CONTRIBUTING.md](../../CONTRIBUTING.md); +as issues marcadas como [`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +têm escopo pensado para quem está chegando. + +Melhorar esta tradução, ou um arquivo de idioma em `apps/desktop-ui/messages/`, +não exige Rust nem build. + +| | | +|---|---| +| 🐛 Reportar um bug · ✨ Sugerir um recurso | [Modelos de issue](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 Fazer uma pergunta | [Discussões](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 Reportar uma vulnerabilidade | [SECURITY.md](../../SECURITY.md) — em privado, nunca em uma issue pública | +| 🗺️ Ver o que está planejado | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 Padrões da comunidade | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ Apoie o projeto + +O MyDevTools é grátis, não tem plano pago e nunca vai ter. Se ele te economiza +tempo, dê uma estrela no repositório, [patrocine no GitHub](https://github.com/sponsors/itsmeakhil) +ou conte para alguém do seu time. + +--- + +## 📄 Licença + +[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html) — veja [LICENSE](../../LICENSE). + +

+ Feito com ❤️ por Akhil e colaboradores +

diff --git a/docs/readme/readme_zh.md b/docs/readme/readme_zh.md new file mode 100644 index 00000000..d3c5d954 --- /dev/null +++ b/docs/readme/readme_zh.md @@ -0,0 +1,203 @@ +

+ + + MyDevTools 徽标 + +

+ +

MyDevTools

+ +

+ 离线开发者工作台 +

+ +

+ 80+ 个开发者工具、API 客户端,SQL / MongoDB / Redis 客户端、加密
+ 与效率工具 —— 全部在你自己的机器上本地运行。 +

+ +

+ 免费 · 开源 · 离线 · 无需账号 · 无广告 +

+ +

+ 最新版本 + CI + 下载量 + 许可证 AGPL-3.0 + GitHub star 数 +

+ +

+ English + | 简体中文 + | 日本語 + | 한국어 + | Español + | Português (BR) + | Deutsch + | Français + | हिन्दी +

+ +

+ ⬇️ 下载 • + 🌐 官网 • + 📚 文档 • + 📋 更新日志 • + 🗺️ 路线图 • + 🤝 参与贡献 • + 💬 讨论区 +

+ + + +> 本文是 [英文 README](../../README.md) 的翻译版本,英文版为准,且可能更新更及时。 +> 欢迎提交修正 —— 参见 +> [翻译说明](../../CONTRIBUTING.md#translations)。 + +--- + +## MyDevTools 是什么? + +MyDevTools 是一款**桌面应用**,用来取代开发者每天打开的一堆标签页、临时工具站 +和单一用途的小应用。格式化工具、转换器、生成器、加密工具、API 客户端, +SQL / MongoDB / Redis 客户端、笔记、代码片段和凭据保险库 —— 一个应用、 +一个搜索框、一个快捷键。 + +它运行在你自己的机器上。没有 MyDevTools 服务器,没有账号,也没有云同步。 + +| 通常的做法 | MyDevTools | +|---|---| +| 十几个单一用途工具站的标签页 | 一个桌面应用,`⌘K` 直达任意工具 | +| 只为格式化就把数据上传到服务器的工具 | 处理全部在你的机器上完成 | +| 注册墙和许可证密钥 | 无需账号、无需登录、无需激活 | +| SQL、MongoDB 和 Redis 各装一个应用 | SQL + MongoDB + Redis + S3 集中在一处 | +| 基础工具还要按档位付费 | 完全免费 —— 每个工具、每项功能 | +| 无法审计的闭源工具 | AGPL-3.0,整个应用都在这个仓库里 | + +--- + +## 📦 安装 + +| 平台 | 方式 | +|---|---| +| **macOS**(Apple Silicon + Intel) | [下载最新的 `.dmg`](https://github.com/mydevtools-tech/mydevtools/releases/latest) —— 通用版本,已签名并公证,支持应用内自动更新 | +| **Windows / Linux** | 尚未发布。Tauri 外壳在这两个平台上都能构建 —— 参见[从源码构建](../../README.md#%EF%B8%8F-building-from-source)和[路线图](../../ROADMAP.md)。在这些平台上做测试是很好的第一次贡献 | + +打开即用:无需注册、无需配置、无需 API 密钥。 + +--- + +## 🧰 工具 + +80+ 个工具,按侧边栏的分组方式排列。带说明的完整列表见 +[英文 README](../../README.md#-tools)。 + +| 分类 | 示例 | +|---|---| +| 📝 **格式化与校验** | JSON 格式化器、JSON Visualizer、JSON 对比、JSON 模式生成器、JSON to Code、YAML 格式化工具、格式转换器(JSON / YAML / TOML / XML)、SQL Formatter、GraphQL 格式化、Markdown 预览、Diff checker、Regex Tester | +| 🌐 **网络与 API** | API 客户端(集合、环境、鉴权、gRPC、mock 服务器 —— 不受浏览器 CORS 限制)、cURL to Code、Webhook 测试器、WebSocket 测试器、DNS 查询、Whois 查询、IP / 子网计算器、HTTP 状态码、User-Agent Parser | +| 🗄️ **数据库与存储客户端** | SQL Client(PostgreSQL、MySQL、MariaDB)、数据库浏览器(MongoDB)、Redis Commander、S3 Drive(AWS S3、DigitalOcean Spaces)—— 原生 Rust 驱动,从你的机器直连数据库 | +| 🔐 **安全与加密** | 密码管理器、加密演练场(AES-GCM)、JWT 解码器、哈希生成器、HMAC 生成器、Bcrypt、TOTP / 2FA 验证码、SSH / RSA 密钥生成器、证书 / PEM 解码器、环境管理、密钥 / API 密钥 | +| 🔄 **转换器** | Base64、图像转 Base64、URL Encoder / 解析器、Escape / Encode、String Case Converter、String Inspector、Line Sort & Dedupe、CSV / Excel ↔ JSON、进制转换、Timestamp / 时区转换器、单位换算器、Chmod 计算器、LLM Token 计数器 | +| ⚙️ **生成器** | UUID / ULID、模拟数据生成器、Cron Builder、Docker Compose 生成器、.gitignore 生成器、二维码生成器、Markdown 表格、Lorem Ipsum | +| 🎨 **媒体与设计** | Color Picker、对比度检查、CSS 渐变生成器、CSS 生成器、图片压缩、SVG 优化、EXIF 查看器与清除、Favicon 生成器、代码截图、键码检查器 | +| 📱 **效率工具** | Notes、代码片段、Tasks、书签、API Keys、休闲角(2048、数独、Snake、Minesweeper、Tetris) | + +所有工具都能在同一个命令面板中搜索,支持深色 / 浅色主题,提供 27 种语言。 + +--- + +## 🔒 隐私优先的设计 + +- **没有 MyDevTools 服务器。** 没有需要登录的后端,没有同步服务,也没有账号 + 体系。工具输入、笔记、代码片段、任务和书签都写入本地 SQLCipher 数据库, + 密钥保存在操作系统钥匙串中加密。 +- **凭据由保险库加密。** 数据库密码、API 密钥和密码管理器条目,都用只有你知道 + 的主密码在本地加密。 +- **每一次对外连接都由你决定。** 应用本身不需要网络,但有些工具的职责就是访问 + *你的*目标:API 客户端发送你写的请求,数据库客户端连接你配置的主机, + DNS / WHOIS 查询公共注册局,更新器检查 GitHub releases。除此之外没有任何数据外发。 +- **可选的匿名使用统计。** 默认关闭,除非你主动开启。开启后只发送两个事件 + (`app_started`、`tool_opened`),附带轮换的会话 id、应用版本和语言环境。 + 没有设备 id,没有路径,也没有你在工具里输入的任何内容。 +- **可审计。** AGPL-3.0。上面这些说法的依据都在这个仓库里 —— 自己读。 + +--- + +## 🏗️ 架构 + +Tauri v2 外壳(`apps/desktop`,Rust)内运行 Next.js 16 / React 19 编写的界面 +(`apps/desktop-ui`)。存储使用 SQLCipher,密钥来自操作系统钥匙串;数据库驱动、 +HTTP / gRPC 和 mock 服务器均为原生 Rust 实现。官网(`apps/web`)只做市场推广, +工具不在那里运行。 +详见 [`docs/ARCHITECTURE.md`](../ARCHITECTURE.md)。 + +--- + +## 🛠️ 从源码构建 + +```bash +git clone https://github.com/mydevtools-tech/mydevtools.git +cd mydevtools +pnpm install +pnpm dev:desktop # Tauri desktop app in dev mode +pnpm build:desktop # build the desktop app +``` + +需要 Node.js ≥ 22、pnpm ≥ 9 和 stable Rust。没有任何配置步骤 —— 不需要 +API 密钥、账号或外部服务。 + +--- + +## MyDevTools 的边界 + +- 目前发布的版本**仅支持 macOS**。 +- **数据库客户端面向日常工作**,不是完整 DBA 套件的替代品 —— 没有可视化表结构 + 设计器,也没有迁移工具。 +- **没有团队功能。** 没有共享工作区,没有同步,没有协作。 +- **有些工具天然需要网络** —— DNS、WHOIS、webhook、API 请求、数据库连接。 + +--- + +## 🤝 参与贡献 + +欢迎各种形式的贡献 —— 修复 bug、新增工具、打磨界面、翻译和文档都算。 +先看 [CONTRIBUTING.md](../../CONTRIBUTING.md);标记为 +[`good first issue`](https://github.com/mydevtools-tech/mydevtools/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +的 issue 专为新人准备。 + +改进这份翻译,或是 `apps/desktop-ui/messages/` 里的某个语言文件, +既不需要 Rust,也不需要构建。 + +| | | +|---|---| +| 🐛 报告 bug · ✨ 提交功能建议 | [Issue 模板](https://github.com/mydevtools-tech/mydevtools/issues/new/choose) | +| 💬 提问 | [讨论区](https://github.com/mydevtools-tech/mydevtools/discussions) · [SUPPORT.md](../../SUPPORT.md) | +| 🔒 报告安全漏洞 | [SECURITY.md](../../SECURITY.md) —— 请私下报告,切勿发公开 issue | +| 🗺️ 查看规划 | [ROADMAP.md](../../ROADMAP.md) | +| 🤝 社区准则 | [CODE_OF_CONDUCT.md](../../CODE_OF_CONDUCT.md) | + +--- + +## ⭐ 支持项目 + +MyDevTools 是免费的,没有付费档位,将来也不会有。如果它帮你省下了时间, +可以给仓库点个 star、[在 GitHub 上赞助](https://github.com/sponsors/itsmeakhil), +或者推荐给同事。 + +--- + +## 📄 许可证 + +[GNU Affero 通用公共许可证 v3.0](https://www.gnu.org/licenses/agpl-3.0.html) —— 参见 [LICENSE](../../LICENSE)。 + +

+ 由 Akhil贡献者们用 ❤️ 打造 +