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
$ npx tinymon-setup --dsn tm_pub_xxx
$ 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
This is code that goes in a source file — your app's entry point — not something you type into a terminal. Do it once, at app startup, before any other code runs. After this, uncaught exceptions are captured automatically.
// index.js — your app's entry point (a source file, not your terminal) import { init } from 'tinymonjs'; init({ dsn: process.env.TINYMON_DSN, environment: 'production', release: '1.0.0', });
# app.py — your app's entry point (a source file, not your terminal) import tinymon tinymon.init( dsn=os.environ['TINYMON_DSN'], environment='production', release='1.0.0', )
# app.rb — your app's entry point (a source file, not your terminal) require 'tinymon' Tinymon.init( dsn: ENV['TINYMON_DSN'], environment: 'production', release: '1.0.0', )
// Main.java — your app's entry point (a source file, not your terminal) import dev.tinymon.Tinymon; Tinymon.init(new Tinymon.Config(System.getenv("TINYMON_DSN")) .environment("production") .release("1.0.0"));
5. Test it
Add this somewhere in your app's code (again, not the terminal) and run your app — it throws once so you can confirm the event reaches your dashboard:
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.