Skip to main content

utilix-sdk

100+ developer utility tools for Python — runs entirely locally, no API key required.

PyPI version Python 3.11+ License: MIT Tests


Installation

pip install utilix-sdk

Requires Python 3.11 or later.


Quick Start

Encoding

from utilix.tools.encoding import encode_base64, decode_base64

result = encode_base64("hello world")
# {"ok": True, "output": "aGVsbG8gd29ybGQ=", "inputBytes": 11, "outputChars": 16}

result = decode_base64("aGVsbG8gd29ybGQ=")
# {"ok": True, "output": "hello world", "outputBytes": 11}

Hashing

from utilix.tools.hashing import hash_all, hash_one

result = hash_all("my-secret")
# Returns MD5, SHA-1, SHA-256, SHA-384, SHA-512 digests in one call

sha256 = hash_one("SHA-256", "my-secret")
# {"ok": True, "algorithm": "SHA-256", "hex": "...", "bits": 256}

JSON Tools

from utilix.tools.json_tools import format_json, minify_json, yaml_to_json

pretty = format_json('{"name":"utilix","version":"0.1.0"}', indent=2)
# {"status": "valid", "output": "{\n  \"name\": \"utilix\", ...", ...}

minified = minify_json('{\n  "a": 1,\n  "b": 2\n}')
# {"ok": True, "output": "{\"a\":1,\"b\":2}", ...}

as_json = yaml_to_json("name: utilix\nversion: 0.1.0")
# {"ok": True, "output": "{\"name\": \"utilix\", \"version\": \"0.1.0\"}"}

Color

from utilix.tools.color import hex_to_rgb, check_contrast, generate_palette

rgb = hex_to_rgb("#3B82F6")
# {"ok": True, "r": 59, "g": 130, "b": 246}

contrast = check_contrast("#FFFFFF", "#3B82F6")
# {"ratio": 3.94, "aa_normal": False, "aa_large": True, "aaa_normal": False, ...}

palette = generate_palette("#3B82F6", scheme="complementary")
# Returns list of hex colors forming a complementary palette

Media

from utilix.tools.media import compress_image, convert_image

with open("photo.jpg", "rb") as f:
    image_bytes = f.read()

result = compress_image(image_bytes, quality=75, format="JPEG")
# {"ok": True, "output": bytes, "original_size": 204800, "compressed_size": 61440, "ratio": 0.3}

converted = convert_image(image_bytes, target_format="WEBP")
# {"ok": True, "output": bytes, "format": "WEBP"}

CSS

from utilix.tools.css import generate_gradient, calc_specificity, minify_css

gradient = generate_gradient({
    "type": "linear",
    "angle": 135,
    "stops": [{"color": "#667eea", "position": 0}, {"color": "#764ba2", "position": 100}]
})
# "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"

specificity = calc_specificity("#nav .item:hover")
# {"score": (0, 1, 1, 1), "display": "0,1,1,1", "explanation": [...]}

minified = minify_css("body {\n  margin: 0;\n  padding: 0;\n}")
# {"ok": True, "output": "body{margin:0;padding:0}", "saved_bytes": 14}

Time Tools

from utilix.tools.time_tools import from_unix, diff_dates, get_next_runs

parsed = from_unix(1735689600)
# {"ok": True, "iso": "2025-01-01T00:00:00+00:00", "relative": "6 months ago", ...}

delta = diff_dates("2024-01-01", "2024-12-31")
# {"ok": True, "days": 365, "months": 12, "human": "12 months"}

schedule = get_next_runs("0 9 * * MON-FRI", count=5)
# Next 5 weekday 9am runs as ISO strings

Network

from utilix.tools.network import ip_to_decimal, cidr_info, is_valid_ipv4

decimal = ip_to_decimal("192.168.1.1")
# {"ok": True, "output": 3232235777}

subnet = cidr_info("10.0.0.0/24")
# {"ok": True, "network": "10.0.0.0", "broadcast": "10.0.0.255",
#  "hosts": 254, "netmask": "255.255.255.0", ...}

print(is_valid_ipv4("256.0.0.1"))  # False

Modules

Module Description
encoding Base64, Base32, URL encoding/decoding, HTML entity encoding
hashing MD5, SHA-1/256/384/512 digests, bcrypt password hashing, htpasswd
json_tools JSON formatting, minification, diffing, CSV conversion, JSONPath, JSON Schema, YAML-JSON
color Color conversion (hex/RGB/HSL/HSV), palettes, contrast ratios, shades/tints, blending
css Gradients, box shadows, border radius, animations, cubic bezier, clamp, specificity, minifier
media Image compression, format conversion, favicon generation, SVG optimization
time_tools Unix timestamp parsing, cron expression parsing, date diffing, timezone conversion
network IPv4 conversion, CIDR calculator, DNS lookup (DoH), IP geolocation
api_tools cURL builder/parser, cURL-to-code, JWT decode/sign, HTTP status codes, CORS/CSP builders
code Regex tester, SQL formatter, HTML formatter/minifier, GraphQL formatter, semver, URL parser, JS minifier
data YAML, TOML, XML, CSV, INI, and .env file parsing, validation, and conversion
generators UUID v4/v7, ULID, password generator, random data, QR code generation
text Word counter, case converter, lorem ipsum, slugifier, string escaping, diff viewer, Markdown/HTML
misc Unicode analysis, ASCII art, Morse code, JSON-to-TypeScript/Go/Python/Zod schema generation
units px/rem/vw conversions, byte formatter, number base conversion, aspect ratio, chmod calculator

Surface A vs Surface B

Surface A — this package (utilix-sdk)

Everything in this package runs locally in your Python process. There are no network calls for the core utilities (DNS lookup and IP geolocation are the only exceptions, and both hit public free APIs). No account, no API key, no rate limits.

pip install utilix-sdk

Ideal for: scripts, CI pipelines, offline environments, CLIs, and any situation where you want deterministic, zero-cost utility functions.

Surface B — REST API (api.utilix.tech/v1)

The same 100+ tools are also available as a hosted REST API at https://api.utilix.tech/v1. This surface requires an API key and is subject to rate limits and pricing tiers.

curl -X POST https://api.utilix.tech/v1/hashing/sha256 \
  -H "Authorization: Bearer $UTILIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": "hello world"}'

Ideal for: polyglot teams, environments where installing Python packages is not possible, and browser-based tooling that needs a backend.


Development

# Clone the repository
git clone https://github.com/utilix-tech/utilix-sdk-python.git
cd utilix-sdk-python

# Install in editable mode with dev dependencies
pip install -e ".[dev]"

# Run the test suite
pytest

# Run with coverage
pytest --cov=utilix --cov-report=term-missing

Publishing to PyPI

Build the distribution

python -m build
# Produces dist/utilix_sdk-x.y.z.tar.gz and dist/utilix_sdk-x.y.z-py3-none-any.whl

Test on TestPyPI first

python -m twine upload --repository testpypi dist/*
# Install from TestPyPI to verify
pip install --index-url https://test.pypi.org/simple/ utilix-sdk

Publish to PyPI

python -m twine upload dist/*

GitHub Actions with OIDC trusted publisher (recommended)

Store no tokens. Configure a trusted publisher on PyPI (Settings > Publishing > Add a new publisher) and use the official PyPA action:

# .github/workflows/publish.yml
name: Publish to PyPI

on:
  push:
    tags:
      - "v*"

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      id-token: write  # Required for OIDC

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Build
        run: |
          pip install build
          python -m build

      - name: Publish to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        # No api-token needed — OIDC trusted publisher handles auth

Tag a release (git tag v0.2.0 && git push --tags) and the workflow publishes automatically with no stored credentials.


License

MIT. See LICENSE for the full text.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

utilix_sdk-0.2.0.tar.gz (202.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

utilix_sdk-0.2.0-py3-none-any.whl (136.4 kB view details)

Uploaded Python 3

File details

Details for the file utilix_sdk-0.2.0.tar.gz.

File metadata

  • Download URL: utilix_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 202.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for utilix_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ec2981fde0af12b4d8fd631d93c863aafef1aacb645f5a003889bde0acbccfde
MD5 d332af07ad06d5050cfefae3f7376251
BLAKE2b-256 1c12a09ad2e15968c6a723cdb4866d66eeef203f7d3f1a9094881a45c3a5d88a

See more details on using hashes here.

File details

Details for the file utilix_sdk-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: utilix_sdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 136.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for utilix_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2934b30cec1b73784dd4d89fe26d1548ae1a80f5a35c90fc7a185a8c17e77af3
MD5 3a680e5167191a21edef1c4ecf4e9e3f
BLAKE2b-256 6ca04ac2be50e2a81806ce2f84d1c9a8254bf0f1e462b1286daa74254feb4f33

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page