Code Beautifier

DevOps & Configuration

Configuration has an unpleasant property: most of it is only validated at deploy time, by the system that consumes it. A misindented Kubernetes manifest, a cron expression that means something other than you assumed, or an environment file with a duplicated key all pass the editor and fail later, often in a pipeline ten minutes after a push. These tools move that feedback into the moment you are writing the file, without uploading it to a build service.

Tools (12)

Dockerfile Formatter & Linter
Normalize Dockerfile instructions and catch common build mistakes before you ship.
GitHub Actions Workflow Validator
Format workflow YAML and catch missing jobs, runners, triggers, and steps before committing.
Kubernetes Manifest Validator
Format multi-document Kubernetes YAML and catch missing metadata or workload containers.
.env Formatter & Validator
Normalize environment variables and catch duplicate keys, malformed lines, and unsafe values.
Cron Parser
Translate complex cron expressions into human-readable English schedules and validate 5-part and 6-part cron syntax.
Cron Expression Builder
Assemble and generate 5-part cron schedules from field parameters or text rules with human-readable descriptions.
.gitignore Generator
Combine curated .gitignore templates for Node, Python, Docker, and more into one deduplicated file.
.gitignore Parser
Explain every .gitignore rule, count negations, and guess stacks to feed back into the generator — offline.
Chmod Permissions Calculator
Convert between Linux octal permissions (755, 644, 777) and symbolic notations (rwxr-xr-x) with bit breakdown and security notes.
cURL to Code
Convert raw cURL shell commands into clean JavaScript Fetch, Axios, or Python requests code instantly.
HAR to cURL / Fetch
Paste a Chrome DevTools HAR export and generate ready-to-run curl, fetch, or axios snippets.
Docker Run to Compose
Turn a docker run command into a compose.yaml service, with ports and environment values quoted so YAML can't retype them.

Config fails late, so check it early

Dockerfile Formatter, Kubernetes Manifest Validator and GitHub Actions Validator parse a file the way its real consumer will, catching the structural mistakes that otherwise surface as a failed pipeline. A manifest that parses is not necessarily correct, but a manifest that does not parse is definitely wrong, and learning that locally costs seconds instead of a full CI round trip and a queue wait.

Cron is easy to write and easy to misread

Five fields hide a surprising amount of ambiguity. Day-of-month and day-of-week are combined with OR when both are restricted, ranges and steps interact in ways that are not obvious, and the gap between a weekly and a monthly schedule is one character. Cron Parser translates an expression into a plain sentence, and Cron Builder assembles one from fields you can read, so the intent and the expression can be compared directly.

Shifting the rest of it left

.env File Tool catches duplicate and malformed keys before they silently shadow one another at runtime. Docker Run to Compose converts a long docker run invocation into a Compose service, quoting ports and environment values so a YAML 1.1 parser does not reinterpret 22:22 as a number. chmod Calculator converts between symbolic and octal permissions when a deployment script needs the other form.

Cheat sheets

Guides

FAQ

My Kubernetes manifest parses but behaves unexpectedly. Why?

Parsing only proves the YAML is well formed. A value can still be the wrong type, most commonly when an unquoted scalar such as a port pair or a version is read as a number, or when indentation nests a key under the wrong parent.

When both day fields are set, does a cron job run on either or both?

Either. When day-of-month and day-of-week are both restricted, standard cron combines them with OR, so the job fires on any day matching one of them. That surprises people expecting the two conditions to be ANDed together.

Can I turn an existing docker run command into a Compose file?

Yes. Docker Run to Compose tokenizes the command the way a shell would, so quoted values and line continuations survive, and it emits a service block with ports and environment values quoted so they keep their intended type.

Why do ports need quoting in a Compose file?

Because a YAML 1.1 parser reads 22:22 as a sexagesimal number rather than a port mapping. Quoting keeps it a string, which is why the converter quotes every port and environment value it writes rather than leaving it to chance.