#ipify #api #client

bin+lib ipify-rs

Rust crate for the ipify.org API

7 releases

0.6.1 Oct 23, 2022
0.6.0 May 13, 2022
0.5.2 Apr 28, 2022
0.5.1 Mar 17, 2022
0.3.1 Nov 7, 2021

#1274 in Command line utilities

30 downloads per month

MIT license

193 lines


Rust API & CLI for accessing the ipify.org HTTP API

Cirrus-CI Crates.io Docs GitHub release GitHub issues SemVer License dependency status

Licensed under the MIT.

  1. About
  2. API Usage
  3. Installation
  4. Example
  5. Documentation
  6. Contributing


This is my attempt at writing an API & CLI client for the IPIFY API (aka ipify.org). After looking at all the other crates, they are all flawed in some way (only IPv4, not really cargo compliant, etc.).

Supported Platforms

  • Unix (tested on FreeBSD, Linux and macOS)
  • Windows
    • cmd.exe
    • Powershell

API Usage

You first create an instance of Ipify with new() set the result you want (IPv4, IPv6) and its format (plain text, json). Result is a string.

  use ipify_rs::{Ipify,Op};
  let ip = Ipify::new().set(Op::IPv4).call();
  println!("My IP is {}", ip);

The four operations are specified as below:

  • OP::IPv4
  • OP::IPv6 (the default)
  • OP::IPv4J (json output)
  • Op::IPv6J (json output)

Minimalistic API

If you only care about the default (plain text, IPv6 query) and don't want to reuse anything later, then myip() is what you want:

use ipify_rs::myip;

fn main() {
    println!("{}", myip());

CLI utility

There is a CLI utility bundled with the API called ipify-cli.

    ipify-cli 0.4.0
    Ollivier Robert <roberto@keltia.net>
    Rust CLI for IPIFY API.
        ipify-cli.exe [OPTIONS]
        -4, --ipv4       Force getting IPv4
        -6, --ipv6       Force getting IPv6
        -h, --help       Print help information
        -J, --json       Request JSON output
        -q, --quiet      Quiet mode
        -V, --version    Display version and exit

You can see both API & CLI versions:

    $ ipify-cli -V
CLI ipify-cli/0.4.0 using API ipify-rs/0.5.0


The file showall.rs inside examples show almost all parameters for the API. You can run it with:

    $ cargo run --example showall
    INFO - Start
    INFO - Using default, minimal API
    INFO - Using defaults (ipv6)
    INFO - Using defaults, get json


You can use this package in your project by adding the following to your Cargo.toml:

ipify-rs = "0.5.0"

then you can use it in your own crates.


Full description of the API with examples is on docs.rs as usual: Ipify.


Please see CONTRIBUTING.md for some simple rules.

I use Git Flow for this package so please use something similar or the usual github workflow.

  1. Fork it ( https://github.com/keltia/dmarc-rs/fork )
  2. Checkout the develop branch (git checkout develop)
  3. Create your feature branch (git checkout -b my-new-feature)
  4. Commit your changes (git commit -am 'Add some feature')
  5. Push to the branch (git push origin my-new-feature)
  6. Create a new Pull Request


~350K SLoC