01
Fire and forget
Call log() and move on. Your event is queued locally and the call returns in microseconds. Logging never blocks your application and never waits on the network.
One call to log. One query to learn.
UNILOGR turns one-line events into a durable, SQL-queryable history of everything your product does - without slowing down your application or trapping your questions inside somebody else's dashboard.
Emit
1 import unilogr
2
3 unilogr.log(
4 "checkout_completed",
5 user_id="u_8814",
6 info={"total": 49.99},
7 )
evt_01J8Y4M7T2KQ
Query
SELECT
event_name,
count(*) AS events
FROM events
WHERE event_time > now() - interval '7 days'
GROUP BY 1
ORDER BY 2 DESC;
| event_name | events |
|---|---|
| page_viewed | 12,847 |
| signup_started | 3,291 |
| checkout_completed | 892 |
01 The entire product: emit with a write key, query with a read key. Everything between them is our problem.
The philosophy
Event logging is the cornerstone of product iteration. It should be the least dramatic part of your stack.
UNILOGR stays invisible while your application is running, then becomes indispensable when you need an answer. No schemas to register. No pipeline to babysit. No vendor deciding which questions fit inside a dashboard. We give you the power to implement real-time analytics on your terms.
The contract
01
Call log() and move on. Your event is queued locally and the call returns in microseconds. Logging never blocks your application and never waits on the network.
02
Events are buffered, retried, and deduplicated automatically. If our infrastructure has trouble, your application keeps running - we handle recovery behind the scenes.
03
Less than a minute after you log, your events are queryable as Postgres rows. Run real SQL - counts, funnels, joins, time series - without a proprietary query language or dashboard limits.
Build from what happened