Quickstart
From zero to your first captured error in about two minutes. The steps are the same in every language — only the install command and the import change.
1. Sign up
Create a tinymon account at console.tinymon.dev/signup. Sign in with Google. There's no credit card required during the trial.
2. Create a project
A project is one logical app — your web frontend, your API server, your cron worker. Each project has its own DSN and its own issue list. Click New project in the dashboard and give it a name (e.g. web-app).
You'll get a DSN that looks like:
tm_pub_a1b2c3d4e5f6g7h8
Keep this somewhere safe — but it's also a public token, so it's fine to ship it in client-side code.
3. Install the SDK
$ npm install tinymonjs
$ pip install tinymon
$ gem install tinymonrb
<!-- pom.xml --> <dependency> <groupId>dev.tinymon</groupId> <artifactId>tinymon</artifactId> <version>0.1.0</version> </dependency>
4. Initialise
Do this once, at app startup, before any other code runs. After this, uncaught exceptions are captured automatically.
import { init } from 'tinymonjs'; init({ dsn: process.env.TINYMON_DSN, environment: 'production', release: '1.0.0', });
import tinymon tinymon.init( dsn=os.environ['TINYMON_DSN'], environment='production', release='1.0.0', )
require 'tinymon' Tinymon.init( dsn: ENV['TINYMON_DSN'], environment: 'production', release: '1.0.0', )
import dev.tinymon.Tinymon; Tinymon.init(new Tinymon.Config(System.getenv("TINYMON_DSN")) .environment("production") .release("1.0.0"));
5. Test it
Throw something to confirm the pipe works:
throw new Error('tinymon test event');
raise Exception('tinymon test event')
raise 'tinymon test event'
throw new RuntimeException("tinymon test event");
Open the dashboard. The event should appear within a few seconds. If it doesn't, see About the DSN below — 9 times out of 10 it's a DSN typo.
About the DSN
The DSN (Data Source Name) is the token that tells the SDK which project to send events to. It looks like tm_pub_…. Properties:
- It's public. Safe to ship in browser bundles. The server enforces rate limits per-DSN.
- It's per-project. If you want separate issue lists for your web app and your API, create two projects and use two DSNs.
- You can rotate it. From the project settings page. Old DSN keeps working for 24 hours after rotation so you can roll deploys.
Wire format
Under the hood, every SDK POSTs an event JSON to https://console.tinymon.dev/api/ingest with header X-Tinymon-Key: tm_pub_…. The event shape is the same across languages and is validated against spec/event.schema.json.
If you're on a platform we don't have an SDK for yet, you can POST events directly:
$ curl -X POST https://console.tinymon.dev/api/ingest \ -H "Content-Type: application/json" \ -H "X-Tinymon-Key: tm_pub_…" \ -d @event.json
The minimum required fields are event_id, timestamp, platform, level, sdk, and exception. Full schema in the repo.