Skip to main content

UCall

JSON Remote Procedure Calls Library
Up to 100x Faster than FastAPI


Discord     LinkedIn     Twitter     Blog     GitHub


Most modern networking is built either on slow and ambiguous REST APIs or unnecessarily complex gRPC. FastAPI, for example, looks very approachable. We aim to be equally or even simpler to use.

FastAPIUCall
pip install fastapi uvicorn
pip install ucall
from fastapi import FastAPI
import uvicorn

server = FastAPI()

@server.get('/sum')
def sum(a: int, b: int):
    return a + b

uvicorn.run(...)    
from ucall.posix import Server
# from ucall.uring import Server on 5.19+

server = Server()

@server
def sum(a: int, b: int):
    return a + b

server.run()    

It takes over a millisecond to handle a trivial FastAPI call on a recent 8-core CPU. In that time, light could have traveled 300 km through optics to the neighboring city or country, in my case. How does UCall compare to FastAPI and gRPC?

Setup 🔁 Server Latency w 1 client Throughput w 32 clients
Fast API over REST ❌ 🐍 1'203 μs 3'184 rps
Fast API over WebSocket ✅ 🐍 86 μs 11'356 rps ¹
gRPC ² ✅ 🐍 164 μs 9'849 rps
UCall with POSIX ❌ C 62 μs 79'000 rps
UCall with io_uring ✅ 🐍 40 μs 210'000 rps
UCall with io_uring ✅ C 22 μs 231'000 rps
Table legend

All benchmarks were conducted on AWS on general purpose instances with Ubuntu 22.10 AMI. It is the first major AMI to come with Linux Kernel 5.19, featuring much wider io_uring support for networking operations. These specific numbers were obtained on c7g.metal beefy instances with Graviton 3 chips.

  • The 🔁 column marks, if the TCP/IP connection is being reused during subsequent requests.
  • The "server" column defines the programming language, in which the server was implemented.
  • The "latency" column report the amount of time between sending a request and receiving a response. μ stands for micro, μs subsequently means microseconds.
  • The "throughput" column reports the number of Requests Per Second when querying the same server application from multiple client processes running on the same machine.

¹ FastAPI couldn't process concurrent requests with WebSockets.

² We tried generating C++ backends with gRPC, but its numbers, suspiciously, weren't better. There is also an async gRPC option, that wasn't tried.

How is that possible?!

How can a tiny pet-project with just a couple thousand lines of code compete with two of the most established networking libraries? UCall stands on the shoulders of Giants:

  • io_uring for interrupt-less IO.

    • io_uring_prep_read_fixed on 5.1+.
    • io_uring_prep_accept_direct on 5.19+.
    • io_uring_register_files_sparse on 5.19+.
    • IORING_SETUP_COOP_TASKRUN optional on 5.19+.
    • IORING_SETUP_SINGLE_ISSUER optional on 6.0+.
  • SIMD-accelerated parsers with manual memory control.

You have already seen the latency of the round trip..., the throughput in requests per second..., want to see the bandwidth? Try yourself!

@server
def echo(data: bytes):
    return data

More Functionality than FastAPI

FastAPI supports native type, while UCall supports numpy.ndarray, PIL.Image and other custom types. This comes handy when you build real applications or want to deploy Multi-Modal AI, like we do with UForm.

from ucall.rich_posix import Server
import ufrom

server = Server()
model = uform.get_model('unum-cloud/uform-vl-multilingual')

@server
def vectorize(description: str, photo: PIL.Image.Image) -> numpy.ndarray:
    image = model.preprocess_image(photo)
    tokens = model.preprocess_text(description)
    joint_embedding = model.encode_multimodal(image=image, text=tokens)

    return joint_embedding.cpu().detach().numpy()

We also have our own optional Client class that helps with those custom types.

from ucall.client import Client

client = Client()
# Explicit JSON-RPC call:
response = client({
    'method': 'vectorize',
    'params': {
        'description': description,
        'image': image,
    },
    'jsonrpc': '2.0',
    'id': 100,
})
# Or the same with syntactic sugar:
response = client.vectorize(description=description, image=image) 

CLI like cURL

Aside from the Python Client, we provide an easy-to-use Command Line Interface, which comes with pip install ucall. It allow you to call a remote server, upload files, with direct support for images and NumPy arrays. Translating previous example into a Bash script, to call the server on the same machine:

ucall vectorize description='Product description' -i image=./local/path.png

To address a remote server:

ucall vectorize description='Product description' -i image=./local/path.png --uri 0.0.0.0 -p 8545

To print the docs, use ucall -h:

usage: ucall [-h] [--uri URI] [--port PORT] [-f [FILE ...]] [-i [IMAGE ...]] [--positional [POSITIONAL ...]] method [kwargs ...]

UCall Client CLI

positional arguments:
  method                method name
  kwargs                method arguments

options:
  -h, --help            show this help message and exit
  --uri URI             server uri
  --port PORT           server port
  -f [FILE ...], --file [FILE ...]
                        method positional arguments
  -i [IMAGE ...], --image [IMAGE ...]
                        method positional arguments
  --positional [POSITIONAL ...]
                        method positional arguments

You can also explicitly annotate types, to distinguish integers, floats, and strings, to avoid ambiguity.

ucall auth id=256
ucall auth id:int=256
ucall auth id:str=256

Free Tier Throughput

We will leave bandwidth measurements to enthusiasts, but will share some more numbers. The general logic is that you can't squeeze high performance from Free-Tier machines. Currently AWS provides following options: t2.micro and t4g.small, on older Intel and newer Graviton 2 chips. This library is so fast, that it doesn't need more than 1 core, so you can run a fast server even on a tiny Free-Tier server!

Setup 🔁 Server Clients t2.micro t4g.small
Fast API over REST ❌ 🐍 1 328 rps 424 rps
Fast API over WebSocket ✅ 🐍 1 1'504 rps 3'051 rps
gRPC ✅ 🐍 1 1'169 rps 1'974 rps
UCall with POSIX ❌ C 1 1'082 rps 2'438 rps
UCall with io_uring ✅ C 1 - 5'864 rps
UCall with POSIX ❌ C 32 3'399 rps 39'877 rps
UCall with io_uring ✅ C 32 - 88'455 rps

In this case, every server was bombarded by requests from 1 or a fleet of 32 other instances in the same availability zone. If you want to reproduce those benchmarks, check out the sum examples on GitHub.

Quick Start

For Python:

pip install ucall

For CMake projects:

include(FetchContent)
FetchContent_Declare(
    ucall
    GIT_REPOSITORY https://github.com/unum-cloud/ucall
    GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(ucall)
include_directories(${ucall_SOURCE_DIR}/include)

The C usage example is mouthful compared to Python. We wanted to make it as lightweight as possible and to allow optional arguments without dynamic allocations and named lookups. So unlike the Python layer, we expect the user to manually extract the arguments from the call context with ucall_param_named_i64(), and its siblings.

#include <cstdio.h>
#include <ucall/ucall.h>

static void sum(ucall_call_t call, ucall_callback_tag_t) {
    int64_t a{}, b{};
    char printed_sum[256]{};
    bool got_a = ucall_param_named_i64(call, "a", 0, &a);
    bool got_b = ucall_param_named_i64(call, "b", 0, &b);
    if (!got_a || !got_b)
        return ucall_call_reply_error_invalid_params(call);

    int len = snprintf(printed_sum, 256, "%ll", a + b);
    ucall_call_reply_content(call, printed_sum, len);
}

int main(int argc, char** argv) {

    ucall_server_t server{};
    ucall_config_t config{};

    ucall_init(&config, &server);
    ucall_add_procedure(server, "sum", &sum, NULL);
    ucall_take_calls(server, 0);
    ucall_free(server);
    return 0;
}

Roadmap

  • Batch Requests
  • JSON-RPC over raw TCP sockets
  • JSON-RPC over TCP with HTTP
  • Concurrent sessions
  • NumPy array and Pillow serialization
  • HTTPS support
  • Batch-capable endpoints for ML
  • Zero-ETL relay calls
  • Integrating with UKV
  • WebSockets for web interfaces
  • AF_XDP and UDP-based analogs on Linux

Want to affect the roadmap and request a feature? Join the discussions on Discord.

Why JSON-RPC?

  • Transport independent: UDP, TCP, bring what you want.
  • Application layer is optional: use HTTP or not.
  • Unlike REST APIs, there is just one way to pass arguments.

Metadata

Release files for ucall 0.5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for ucall 0.5.4
File
ucall-0.5.4-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
ucall-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ucall-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
ucall-0.5.4-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details
ucall-0.5.4-cp312-cp312-macosx_11_0_universal2.whl CPython 3.12 CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64) Details
ucall-0.5.4-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
ucall-0.5.4-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
ucall-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ucall-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
ucall-0.5.4-cp311-cp311-macosx_11_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 11.0+ x86-64 Details
ucall-0.5.4-cp311-cp311-macosx_11_0_universal2.whl CPython 3.11 CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64) Details
ucall-0.5.4-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
ucall-0.5.4-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
ucall-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ucall-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
ucall-0.5.4-cp310-cp310-macosx_11_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 11.0+ x86-64 Details
ucall-0.5.4-cp310-cp310-macosx_11_0_universal2.whl CPython 3.10 CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64) Details
ucall-0.5.4-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
ucall-0.5.4-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
ucall-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
ucall-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
ucall-0.5.4-cp39-cp39-macosx_11_0_x86_64.whl CPython 3.9 CPython 3.9 macOS 11.0+ x86-64 Details
ucall-0.5.4-cp39-cp39-macosx_11_0_universal2.whl CPython 3.9 CPython 3.9 macOS 11.0+ universal2 (ARM64, x86-64) Details
ucall-0.5.4-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 31.2 MB

Release files / ucall-0.5.4-cp312-cp312-win_amd64.whl

Download URL ucall-0.5.4-cp312-cp312-win_amd64.whl
Size 1.4 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9f1cddfe32ee551fe5a3d0c1c1c1c9274afc2ecd8fa60ce4d55624ddb15f193e
BLAKE2b-256 checksum
How to use checksums
3f41247687fb37237c938316ce332cccbe8111dd719c99f1690b1b71e75d09ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ucall-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
edd1d6c5e5aa48aac06df8ab101c3e738a7e04f9e6aaf65ddf34155aef6f5557
BLAKE2b-256 checksum
How to use checksums
e09bbfbe91a567ad0b737ea69d4fc638c9250e45077347e683c4a9e2d7fe8130
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL ucall-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
4661e0f374e00eb9e3661c6a720387ec1073974370350fa0eb85e641593c0318
BLAKE2b-256 checksum
How to use checksums
10d2c3798571a911245733a79d10a2b0512d6c8990f5f59b055392fddcc40833
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp312-cp312-macosx_11_0_x86_64.whl

Download URL ucall-0.5.4-cp312-cp312-macosx_11_0_x86_64.whl
Size 1.0 MB
Tags CPython 3.12 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
6ab6361bbf4dacf73f054537411eb54c0884d2d11b8eb0bad7e4a3925f0302b2
BLAKE2b-256 checksum
How to use checksums
ba5238becd9a5f136700d0b610f95404478d24feb7d7282a2975ffa429ef8a7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp312-cp312-macosx_11_0_universal2.whl

Download URL ucall-0.5.4-cp312-cp312-macosx_11_0_universal2.whl
Size 1.9 MB
Tags CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
f653c5b93a5c5e6b1581a92129586028f0cdd9eb45fc3f3758621f818c4175cd
BLAKE2b-256 checksum
How to use checksums
1a40dd8f6cd762f5fa74a49dcb952d17ad7f2cf03ab617d0ff4b9dab3af45e4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp312-cp312-macosx_11_0_arm64.whl

Download URL ucall-0.5.4-cp312-cp312-macosx_11_0_arm64.whl
Size 930.8 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2a19efb5ad137a7a00b96e1e1554fb557f5b4a9b056daf6f99d31509116e0103
BLAKE2b-256 checksum
How to use checksums
fc20626b9406137921280f29a331cd4c74c04ad470116706d2d608b13d4fa0ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-win_amd64.whl

Download URL ucall-0.5.4-cp311-cp311-win_amd64.whl
Size 1.4 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
40738ed09504e7b2876ae50da2a07b0aa776b9b143b2847b19624116a3c92716
BLAKE2b-256 checksum
How to use checksums
419affa73a234ef5df2846d2fb253e8688a4f3d8fec1b3223172e4eb6e331e8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ucall-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d7678dd9525c4842984f5905e56f92f4b3743af7e0bb6bd72e39bae59b1d78a1
BLAKE2b-256 checksum
How to use checksums
14bdaf253ca726c03f54e1290d67c0680ecefa8dba84a2a10ad27ad20365103c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL ucall-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
586f078374826d889533efc9c5ce38e65e6dd1adb499f8440b4615b358d1138f
BLAKE2b-256 checksum
How to use checksums
b1a4214363271cb5e15b43c68d5179849631aef11607cc7f6b65f6b1c067b8af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-macosx_11_0_x86_64.whl

Download URL ucall-0.5.4-cp311-cp311-macosx_11_0_x86_64.whl
Size 1.0 MB
Tags CPython 3.11 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
e9b823a3b94d340e8806e4586b534049d13928de17a3711c9fc54b0529df5c82
BLAKE2b-256 checksum
How to use checksums
0e79cd5b9f3ec65d8b1cdf7b42b4acd940821b8e49af03edabe7a8f0e00ad9dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-macosx_11_0_universal2.whl

Download URL ucall-0.5.4-cp311-cp311-macosx_11_0_universal2.whl
Size 1.9 MB
Tags CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
731693b4803def57667cd2d4c2f5b64e910f5908703d200d5c14b1179cb7bc25
BLAKE2b-256 checksum
How to use checksums
a305af3925818cb407b32a3e0b8a6ee8b316948ea0af19a24359573966833d96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp311-cp311-macosx_11_0_arm64.whl

Download URL ucall-0.5.4-cp311-cp311-macosx_11_0_arm64.whl
Size 930.9 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
27947daab78a20d2760037cc557ae8072fa40187a4de1e1fbc45156fd17616a7
BLAKE2b-256 checksum
How to use checksums
40954738628dde8a4dae7f979a009d224f5dde1a7719c8a9536751eefdbf09c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-win_amd64.whl

Download URL ucall-0.5.4-cp310-cp310-win_amd64.whl
Size 1.4 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
83611b0b10954c9f8cafd6ade2705e8073319d7b928584ee2951176545ce1a3f
BLAKE2b-256 checksum
How to use checksums
386e715723f007f737238c7c395a0729bd58cb0a55d356d8ec7f32de81b5afac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ucall-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1aac14aaa17529e2c0a224092658389201cb549afe73651048d60504c7a646a8
BLAKE2b-256 checksum
How to use checksums
aa0212721dafa10ab51acf4ae21eee9ff21f3deff19cf3f74555f415586c6aca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL ucall-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1d4df5982894750ee579bf5d6e99b86b352b0c4ab586cc1a002607f73ea6949b
BLAKE2b-256 checksum
How to use checksums
4ab135bb775c6a174fe52683f1fe499f9e1f239a6d2e622752512986ad7d12da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-macosx_11_0_x86_64.whl

Download URL ucall-0.5.4-cp310-cp310-macosx_11_0_x86_64.whl
Size 1.0 MB
Tags CPython 3.10 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
3172f1df706545d70aa48735b56b9e25368f3245257043976b0f891224145d12
BLAKE2b-256 checksum
How to use checksums
a993742ff708adc25437ee5ce9d0ff420f8d9c4c470a4c2a29741dcf08f61f2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-macosx_11_0_universal2.whl

Download URL ucall-0.5.4-cp310-cp310-macosx_11_0_universal2.whl
Size 1.9 MB
Tags CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
c91bfaca7a243365fbf37b46f32113a407b4dc232ae7f1789eab6cf0173a598e
BLAKE2b-256 checksum
How to use checksums
9d28953727c89008c2338b07913fa6e2ecf5a0de8d469e4d4ff8433e04558ea8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp310-cp310-macosx_11_0_arm64.whl

Download URL ucall-0.5.4-cp310-cp310-macosx_11_0_arm64.whl
Size 930.8 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8bddc550a8642f74f28a15595af1f31f45a02b41bf4f4b4d85e21481afdebedd
BLAKE2b-256 checksum
How to use checksums
d7ac83bce3f20a853fa2d9ada22e772dee2cb1b9346fa2b4f193bdc4318de421
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-win_amd64.whl

Download URL ucall-0.5.4-cp39-cp39-win_amd64.whl
Size 1.4 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
99dec59f7406ca53e33cf70a8f8b1e02c1aad323b6934149d7195772ac2a252b
BLAKE2b-256 checksum
How to use checksums
2ab239efa711ab3ef61c7f3f90882aa1bc2ce9c8e9161ac572f81c0ae441ab09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL ucall-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
39beb76d1b61e34492a1cdb3733e72b6b1b381b19883230b6c337201da5c2341
BLAKE2b-256 checksum
How to use checksums
16120fcda593abc38f2ae79187a4ab635d78d739783fac3db4585c2d3dc0394e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL ucall-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.9 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
550f5f679049271381f7a2ba2d328a8858878706b766363ff93849dbec9d40db
BLAKE2b-256 checksum
How to use checksums
df4ee0d28ee1c588a40b4b9ff31fe4b5ea3a2713ceeb646b6781081e28c25c62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-macosx_11_0_x86_64.whl

Download URL ucall-0.5.4-cp39-cp39-macosx_11_0_x86_64.whl
Size 1.0 MB
Tags CPython 3.9 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
528e30408c39f8124ef123ab1f097d9016a185f8677bd1ca4f8dc3ee87201169
BLAKE2b-256 checksum
How to use checksums
611501c79f770f96bc4ccb70a54add996883601fdec90404950447d026a8f305
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-macosx_11_0_universal2.whl

Download URL ucall-0.5.4-cp39-cp39-macosx_11_0_universal2.whl
Size 1.9 MB
Tags CPython 3.9 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
3a26530ed45147dfac9459664f70769e871ff6cf9858421814c93b37aba1dc50
BLAKE2b-256 checksum
How to use checksums
43ff7699c442f414fca16db656f7a513a77780084101d8a985c94f9859430a3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / ucall-0.5.4-cp39-cp39-macosx_11_0_arm64.whl

Download URL ucall-0.5.4-cp39-cp39-macosx_11_0_arm64.whl
Size 930.9 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c1482992b6e6343a242b9ab9375509cb2018601627558e80310aa4e27223047c
BLAKE2b-256 checksum
How to use checksums
eb56513bca02dfec0dcc62780d30cacd81997b1ac8511426206391ca4a71fd6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.5.4 This release

24 release files

0.5.2

24 release files

0.5.0

15 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page