Nonvoluntary Professional Mangling

    TypeScript icon, indicating that this package has built-in type declarations

    4.4.0 • Public • Published


    Transpile curl commands into Python and other languages.

    Try it in the browser at or from the command line:

    $ curlconverter --data-raw "hello=world"
    import requests
    data = {
        'hello': 'world',
    response ='', data=data)


    • Understands most Bash syntax
    • Knows about all of curl's 300 or so arguments, including deleted ones, but most are ignored
    • Allows passing multiple short arguments in one, just like curl, e.g. -OvXPOST
    • --data @filename generates Python code that reads from that file
    • --data @- generates Python code that reads from stdin (or piped file/input)
    • Converts JSON to native objects
    • Warns about issues with the conversion


    • Only HTTP is supported
    • If multiple URLs are passed only the last one is used
    • Code generators for other languages are less thorough than the Python generator
    • and much more


    Install the JavaScript library for use in your own projects with

    npm install curlconverter

    Install the command line tool with

    npm install --global curlconverter

    curlconverter requires Node 14+.


    Usage as a library

    The JavaScript API is a bunch of functions that can take either a string of Bash code or an array of already-parsed arguments (like process.argv) and return a string with the resulting program:

    import * as curlconverter from 'curlconverter';
    curlconverter.toPython(['curl', '']);
    // "import requests\n\nresponse = requests.get('')\n"

    Note: add "type": "module" to your package.json for the import statement above to work.

    There's a corresponding set of functions that also return an array of warnings if there are any issues with the conversion:

    curlconverter.toPythonWarn(['curl', '']);
    // [
    //   "import requests\n\nresponse = requests.get('')\n",
    //   [ [ 'bad-scheme', 'Protocol "ftp" not supported' ] ]
    // ]

    If you want to host curlconverter yourself and use it in the browser, it needs two WASM files to work, tree-sitter.wasm and tree-sitter-bash.wasm, which it will request from the root directory of your web server. If you are hosting a static website and using Webpack, you need to copy these files from the node_modules/ directory to your server's root directory in order to serve them. You can look at the webpack.config.js for to see how this is done. You will also need to set {module: {experiments: {topLevelAwait: true}}} in your webpack.config.js.

    Usage from the command line

    The command line tool is a drop-in replacement for curl. Take any curl command, change "curl" to "curlconverter" and it will print code instead of making the request. Alternatively, you can pass - to tell it to read the curl command from stdin.

    $ curlconverter
    $ echo 'curl' | curlconverter -

    You can choose the output language by passing --language <language>. The options are

    • ansible
    • cfml
    • csharp
    • dart
    • elixir
    • go
    • java
    • javascript, node, node-axios, node-request
    • json
    • matlab
    • php, php-request
    • python (the default)
    • r
    • ruby
    • rust

    Usage in VS Code

    There's a VS Code extension that adds a "Paste cURL as <language>" option to the right-click menu: It has to use an old version of curlconverter, so it doesn't support the same languages, curl arguments or Bash syntax as the current version.




    MIT © Nick Carneiro


    npm i curlconverter

    DownloadsWeekly Downloads






    Unpacked Size

    1.28 MB

    Total Files


    Last publish


    • nickc
    • verhovsky