Collection of handy online tools for developers, with great UX. https://it-tools.tech
Find a file
a0666660 9e4e2c3d24 fix(timezone-converter): resolve offsets by fixed-point iteration
Differential sweeps against Intl's own shortOffset rendering (418
zones x 920 instants, 384k pairs) and 3.3k A->B->A roundtrips surfaced
two issues:

- offsetLabel carried sub-second residue from Date milliseconds into
  the sign test, rendering a zero offset as UTC-0 for instants with
  non-zero ms; round to whole minutes first
- the single-pass source-offset lookup misparsed wall times near
  midnight-adjacent fall-back transitions: EU end-of-DST moves the
  offset at 01:00 UTC, so the offset at the naive time treated as UTC
  (CET +1) differs from the offset at the true instant (CEST +2) and
  2027-10-31 01:05:27 Europe/Malta parsed 1 hour late. Iterate the
  offset to a fixed point; realizable wall times converge in <= 2
  steps, gap/fold times settle on an adjacent offset.

The sweep and roundtrip suites stay in the tree as a differential
regression (timezone-converter.differential.test.ts).
2026-10-03 21:16:18 +08:00
.github fix(ci): unblock e2e tests on ubuntu 24.04 runners 2026-10-02 13:05:12 +08:00
.vscode docs(ide): updated vscode extensions settings (#472) 2023-06-19 21:49:40 +00:00
_templates/generator/ui-component refactor(ui): new c-table ui component (#665) 2023-10-14 22:45:14 +00:00
locales fix(locales): update license from MIT to GPL-3.0 in language files (#1419) 2024-12-11 19:33:24 +00:00
public refactor(share): new share banner 2022-08-14 10:53:39 +02:00
scripts feat(i18n): added missing locale files in tools (#863) 2024-02-01 17:05:05 +00:00
src fix(timezone-converter): resolve offsets by fixed-point iteration 2026-10-03 21:16:18 +08:00
.dockerignore refactor(docker): improved docker config (#700) 2023-10-30 17:11:16 +00:00
.eslintrc-auto-import.json feat(ui): added c-select in the ui lib (#550) 2023-08-07 15:30:00 +00:00
.eslintrc.cjs feat(copy): support legacy copy to clipboard for older browser (#581) 2023-08-21 23:00:20 +00:00
.gitignore chore(e2e): execute e2e against built app (#511) 2023-06-29 18:48:51 +02:00
.nvmrc chore(deps): update dependency node to v18.18.2 (#674) 2023-10-22 10:26:05 +02:00
.prettierrc refactor(lint): externalization of prettier for simpler IDE support 2022-08-03 17:19:53 +02:00
.versionrc chore: added standard-version 2022-04-16 13:41:10 +02:00
auto-imports.d.ts chore(deps): updated unplugin-auto-import (#504) 2023-06-25 09:45:56 +00:00
CHANGELOG.md docs(changelog): update changelog for 2024.10.22-7ca5933 2024-10-22 10:25:36 +02:00
components.d.ts feat(new tool): Regex Tester (and Cheatsheet) (#1030) 2024-09-20 18:39:40 +00:00
Dockerfile fix(dockerfile): revert replacement of nginx image with non-privileged one (#716) 2023-11-02 09:10:13 +01:00
env.d.ts revert(pwa): fallback to autoUpdate 2023-03-01 23:35:17 +01:00
index.html feat(config): allow app to run in a subfolder via BASE_URL (#461) 2023-06-19 18:42:29 +02:00
LICENSE chore: added license file 2022-07-21 21:06:22 +02:00
netlify.toml chore(config): netlify deployment support (#443) 2023-06-10 17:02:08 +02:00
nginx.conf fix(docker): nginx config to redirect to index.html 2023-03-29 00:15:56 +02:00
package.json fix(ci): unblock e2e tests on ubuntu 24.04 runners 2026-10-02 13:05:12 +08:00
playwright.config.ts fix(bcrypt tool): allow salt rounds up to 100 (#987) 2024-04-15 09:43:12 +02:00
pnpm-lock.yaml fix(ci): unblock e2e tests on ubuntu 24.04 runners 2026-10-02 13:05:12 +08:00
README.md chore(readme): remove sponsors section (#1733) 2026-02-12 01:59:29 +01:00
renovate.json chore(deps): added renovate.json (#477) 2023-06-23 16:49:03 +02:00
tsconfig.app.json chore(deps): switched to fucking typescript v5 (#501) 2023-08-21 19:57:59 +00:00
tsconfig.json
tsconfig.vite-config.json chore(deps): switched to fucking typescript v5 (#501) 2023-08-21 19:57:59 +00:00
tsconfig.vitest.json chore(deps): switched to fucking typescript v5 (#501) 2023-08-21 19:57:59 +00:00
unocss.config.ts fix(c-input-text): set minimum height for input field (#1552) 2025-04-06 23:16:09 +02:00
vercel.json feat(config): added vercel.json 2022-04-16 16:58:10 +02:00
vite.config.ts feat(i18n): get locales on build (#880) 2024-02-11 00:33:52 +01:00

logo

Useful tools for developer and people working in IT. Try it!

Functionalities and roadmap

Please check the issues to see if some feature listed to be implemented.

You have an idea of a tool? Submit a feature request!

Self host

Self host solutions for your homelab

From docker hub:

docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest

From github packages:

docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corentinth/it-tools:latest

Other solutions:

Contribute

VSCode with the following extensions:

with the following settings:

{
  "editor.formatOnSave": false,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "i18n-ally.localesPaths": ["locales", "src/tools/*/locales"],
  "i18n-ally.keystyle": "nested"
}

Type Support for .vue Imports in TS

TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need TypeScript Vue Plugin (Volar) to make the TypeScript language service aware of .vue types.

If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a Take Over Mode that is more performant. You can enable it by the following steps:

  1. Disable the built-in TypeScript Extension
    1. Run Extensions: Show Built-in Extensions from VSCode's command palette
    2. Find TypeScript and JavaScript Language Features, right click and select Disable (Workspace)
  2. Reload the VSCode window by running Developer: Reload Window from the command palette.

Project Setup

pnpm install

Compile and Hot-Reload for Development

pnpm dev

Type-Check, Compile and Minify for Production

pnpm build

Run Unit Tests with Vitest

pnpm test

Lint with ESLint

pnpm lint

Create a new tool

To create a new tool, there is a script that generate the boilerplate of the new tool, simply run:

pnpm run script:create:tool my-tool-name

It will create a directory in src/tools with the correct files, and a the import in src/tools/index.ts. You will just need to add the imported tool in the proper category and develop the tool.

Contributors

Big thanks to all the people who have already contributed!

contributors

Credits

Coded with ❤️ by Corentin Thomasset.

This project is continuously deployed using vercel.com.

Contributor graph is generated using contrib.rocks.

IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt IT Tools - Collection of handy online tools for devs, with great UX | Product Hunt

License

This project is under the GNU GPLv3.