Skip to main content

omglol

Python client and CLI for the omg.lol API — weblog, pastebin, statuslog, PURLs, DNS, /now page, and more.

Setup

uv sync
cp .env.example .env  # add your API key and address

Get your API key at home.omg.lol/account.

CLI

After uv sync, the omglol command is available:

# Publish markdown files to your weblog
omglol post article.md draft.md

# List weblog posts
omglol posts list

# Get a specific post
omglol posts get my-post-slug

# Delete a post
omglol posts delete my-post-slug

# Manage pastes
omglol paste list
omglol paste create my-note "Some content here"
omglol paste get my-note
omglol paste delete my-note

# Post and list statuses
omglol status post "Working on something cool"
omglol status post "Celebrating!" --emoji "🎉"
omglol status list

# Manage PURLs (persistent redirects)
omglol purl list
omglol purl create gh https://github.com/you
omglol purl delete gh

# /now page
omglol now get
omglol now update "Currently learning Rust"

# DNS records
omglol dns list
omglol dns create CNAME www example.com
omglol dns delete <record-id>

# Web page / profile
omglol web get
omglol web update "<h1>Hello</h1>"
omglol web update - < page.html  # read from stdin

# Email forwarding
omglol email get
omglol email set me@example.com

# Profile picture
omglol pfp avatar.png

# Account info
omglol info

Dry run

Preview what would be sent without making changes:

omglol --dry-run post article.md
omglol --dry-run status post "Test"
omglol --dry-run dns create A @ 1.2.3.4

Library

from omglol import OmgLol

client = OmgLol(api_key="your_key", address="yourname")

# Weblog
client.post_markdown("my-post.md")
client.create_post(title="Hello World", content="This is my post.")
for post in client.list_posts():
    print(post.title, post.location)
client.delete_post("my-post-slug")

# Pastebin
client.create_paste("notes", "Some text")
for paste in client.list_pastes():
    print(paste.title)

# Statuslog
client.post_status("Hello from the API!", emoji="🎉")
for status in client.list_statuses():
    print(status.emoji, status.content)

# PURLs
client.create_purl("gh", "https://github.com/you")
for purl in client.list_purls():
    print(f"{purl.name} → {purl.url}")

# /now page
now = client.get_now()
print(now.content)
client.update_now("Currently building things")

# DNS
for rec in client.list_dns_records():
    print(f"{rec.record_type} {rec.name} → {rec.data}")
client.create_dns_record("CNAME", "www", "example.com")

# Web page / profile
client.update_web("<h1>My page</h1>")

# Email forwarding
client.set_email_forwarding("me@example.com")

# Profile picture
client.upload_pfp("avatar.png")

# Account
info = client.get_address_info()

All list/get methods return typed dataclasses (Post, Paste, Status, Purl, DnsRecord, NowPage) instead of raw dicts.

Markdown frontmatter

Weblog posts can include optional frontmatter:

---
title: My Post Title
date: 2026-03-14 12:00
slug: custom-slug
---

Body content here...

If no frontmatter is present, the first # Heading is used as the title.

Environment variables

Variable Description
OMGLOL_API_KEY Your omg.lol API key
OMGLOL_ADDRESS Your omg.lol address (e.g. olivier)

Development

uv sync
uv run pytest -v

License

MIT

Metadata

Release files for omglol-api 0.1.0

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

Source distribution (sdist)

Source distribution for omglol-api 0.1.0
File Size Uploaded
omglol_api-0.1.0.tar.gz 36.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for omglol-api 0.1.0
File Interpreter ABI Platform
omglol_api-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 46.7 kB

Release files / omglol_api-0.1.0.tar.gz

Download URL omglol_api-0.1.0.tar.gz
Size 36.3 kB
Tags Source
SHA-256 checksum
How to use checksums
391a905d2bd265605ecd2cf51de1251f48642d15cc01897dea1c47fd0fe1b3b0
BLAKE2b-256 checksum
How to use checksums
70c723b769afdd1fd245c167a0e130e8090cc9da02036b42ce94972490a2b9c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release files / omglol_api-0.1.0-py3-none-any.whl

Download URL omglol_api-0.1.0-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
29e51723d4deec478392f5f0a020a8fd130eb0f0e20538564c5e9e93e9b128cd
BLAKE2b-256 checksum
How to use checksums
0e4ec74237352080d89f23b903512d79fd3607d4320dcf3013064538c109fe87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 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