115 points by darubramha 3 months ago | 59 comments
I built uncurl.dev to scratch my own itch: I kept getting curl commands in API docs, bug reports, or Slack messages and wanted a quick way to visualize, run, and debug them without firing up Postman or writing code to dissect them. It was also sometimes painful to create a test page specifically for non-tech users to consume an API. I originally vibe-coded this over a weekend just to make it easier for myself to debug API requests shared as curl commands. It slowly grew into something I found surprisingly useful in my workflow, so I decided to clean it up and share it.
uncurl.dev takes a curl command and: - Converts it into a visual representation - Lets you edit and inspect all parts of the request - Allows sharing via a unique link - (Optionally) executes it from the server, so business or non-technical users can see results
Execution is currently behind login, with a cap (5/min) to avoid abuse and manage costs. Non-logged-in users can still build and share curl commands—they just can’t execute them. The server runs each request in a Docker sandbox with strict resource/time limits (cpu, memory, timeout, no network access outside the request).
It’s not meant to replace full-featured tools like Postman or Hoppscotch. It’s more of a “CLI-to-UI bridge” for fast sharing and debugging, especially in dev workflows where curl is the starting point. Think of it like Pastebin or JSFiddle, but for curl commands.
If you’ve ever copied a curl from an API doc and wanted a cleaner way to see it or send it to someone else, I’d love your feedback.
Thanks! (You can try it without signup here: https://uncurl.dev)
ajnin 3 months ago
themanmaran 3 months ago
So I see this as similar to having a sandbox built into your docs page. Except I can customize a request and send it directly to a user. The only missing piece is the authentication part. Since I wouldn't want to embed an api key in this link.
darubramha 3 months ago
I kept finding myself sending curl requests in Slack or email, and it felt clunky—especially when non-devs or support teams needed to test something quickly. uncurl.dev started as a way to make that share-and-execute process more visual and frictionless.
For the auth part—embedding API keys in payload is a no-go in most cases. For now, sending out auth headers separately for them to fill in themselves is what I did within my workplace.
I'm exploring a couple of ideas to help with this:
Team-scoped secrets: For logged-in users or teams, saving common auth headers that aren’t part of the shared link.
One-time, encrypted secrets: The link works once and destroys the sensitive payload after execution.
aae42 3 months ago
TheDong 3 months ago
ultrafez 3 months ago
markerz 3 months ago
I also think it's weird to be so willing to let people run arbitrary CURL commands from your platform, without any billing or account verification. It feels ripe for abuse.
jasir 3 months ago
[0]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/COR...
darubramha 3 months ago
CORS was a blocker for client side requests, I have a separate branch where this is integrated, maybe will add it alongside server side execution to let the person creating the curl decide whether they can execute on browser or server side.
markerz 3 months ago
mzronek 3 months ago
reassess_blind 3 months ago
darubramha 3 months ago
Really appreciate you taking the time to look and let me know (even if it had to be in public). I have added a github repo for filing bugs (https://github.com/uncurl/uncurl-support) in the docs page :)
treesknees 3 months ago
xrisk 3 months ago
treesknees 3 months ago
We use libcurl and pycurl where it makes sense. This rule for cli options extends to other binaries as well, some that don’t offer libraries like curl does (think closed source firmware tools or ancient homegrown cli tools.)
markerz 3 months ago
notpushkin 3 months ago
trollied 3 months ago
darubramha 3 months ago
Security is a top priority for this project, and I'm actively working to tighten things up. This initial version was launched to validate the concept, and admittedly, there were oversights (including an unauthenticated DELETE endpoint that was highlighted).
If you're open to it, I'd love to learn more about what you'd want to see from a security standpoint in a tool like this. I'm building in public and happy to be corrected where needed.
Thanks again for keeping things real.
VWWHFSfQ 3 months ago
byearthithatius 3 months ago
darubramha 3 months ago
cgannett 3 months ago
Tabular-Iceberg 3 months ago
Maybe the only solution is to somehow extract the actual command line parser from curl itself.
darubramha 3 months ago
h1fra 3 months ago
markerz 3 months ago
https://uncurl.dev/curl/78ab4bf5-34e8-45a0-b3b1-32dd6aa7e360
or this command
curl -X DELETE "https://uncurl.dev/api/curls?id=051606b5-49c8-4f14-9689-4d424f71d331"
Looks like deletes are unauthenticated.darubramha 3 months ago
Yes, delete is unauthenticated as highlighted, will be working on a fix for this. And you can delete any API if it is created as a logged in user.
serial_dev 3 months ago
byearthithatius 3 months ago
benoitg 3 months ago
Your project looks very cool though, and expands on the share aspect of the Jetbrains feature, very interesting!
darubramha 3 months ago
uncurl.dev kind of grew out of that same spirit, but with the goal of making the output shareable and executable in a browser, especially for folks who might not have an IDE set up or are outside the usual dev loop (PMs, etc.)
hk1337 3 months ago
_kidlike 3 months ago
Lately I feel like a lot of people think they are finding gaps around developer experience, but it's only because they don't know the right tools that already exist...
niek_pas 3 months ago
`curl www.google.com` works using 8.7.1 on macOS, but I get "Please enter a valid curl command" on your website.
darubramha 3 months ago
lenkite 3 months ago
byearthithatius 3 months ago
darubramha 3 months ago
You can absolutely delete your curl if you have created as a logged in user.
thomasfromcdnjs 3 months ago
flipperto 3 months ago
I would 100% forbid its use in a company environment and I would encourage people in general not to use it for any non-trivial use case.
byearthithatius 3 months ago
byearthithatius 3 months ago
fitsumbelay 3 months ago
One thing: it's rejecting dict lookups as invalid URL, eg. `curl dict://dict.org/d:failure:fd-eng-fra`
I'm checking first here whether I missed something in the docs about not supporting DICT before I add issue to the GH repo
darubramha 3 months ago
I hadn’t actually considered dict:// usage, I see the bug report as well, thanks, will see if I can include it.
byearthithatius 3 months ago
dwrowe 3 months ago
markerz 3 months ago
byearthithatius 3 months ago
darubramha 3 months ago
Non-logged in curls are auto purged after 30 days.
ustad 3 months ago
Could you describe more about the docker sandbox that you have? I am especially interested in the network restrictions.
darubramha 3 months ago
The container has restricted outbound access—only HTTP/S requests are allowed. It runs inside an isolated network namespace with no access to the host network or other infrastructure components. There's no inbound access, and the container can't receive unsolicited requests from the outside world.
The sandbox container can only communicate with other containers in the same network, the main application container and sandbox container are on the same network, allowing them to communicate.
ustad 3 months ago
Do you think there could be ways for someone to abuse the network setup you have?
For example, accessing other internet hosts or other containers in the same container network?
What happens when curl gets redirect responses?
3 months ago
3 months ago
polishdude20 3 months ago
darubramha 3 months ago
I have a feature working to allow users browser side execution, but as others have also pointed out CORS is a big blocker for client side execution not working for all APIs.
zamadatix 3 months ago
Local execution could still be a handy feature for at least the most common basic commands though, but it'd start to have to wade into "explaining a lot to the user why this isn't really what the result might look like" territory.
VWWHFSfQ 3 months ago
zamadatix 3 months ago