Browse and read your Saga20 tabletop campaign sessions inside Obsidian.
Saga20 turns your D&D / TTRPG session recordings into searchable summaries and recaps. This plugin pulls those sessions into Obsidian so you can browse, read, and save them next to the rest of your campaign notes.
This is the official open-source Obsidian client for the Saga20 Public API. Issues, pull requests, and feedback are welcome. See Contributing below.
summary_markdown (no 4096-char Discord limit).Saga20: Open session… opens a search palette over your sessions..md note with frontmatter (saga20_id, status, recording date, source URL).This plugin isn't in the Community Plugins catalog yet. Until it is, you have a few options.
manifest.json, main.js, and styles.css from the Releases page.saga20 inside <your vault>/.obsidian/plugins/.If you use obsidian42-brat to follow plugins that aren't in the catalog yet:
secondwind77/saga20-obsidian-plugin.git clone https://github.com/secondwind77/saga20-obsidian-plugin.git
cd saga20-obsidian-plugin
npm install
npm run build
Then copy manifest.json, main.js, and styles.css into <your vault>/.obsidian/plugins/saga20/.
s20_live_).| Command | What it does |
|---|---|
Saga20: Browse sessions |
Open the sidebar list. Click any session to open its full recap. |
Saga20: Open session… |
Fuzzy-search by title or session number, opens the recap. |
Saga20: Save session to vault… |
Pick a session, drop it into your vault as a markdown note. |
Saga20: Refresh sessions cache |
Force a re-pull of the session list. |
You can also right-click a session in the sidebar for the same actions.
Saga20 Sessions.0 disables caching.This plugin talks to one external service: the Saga20 Public API at https://app.saga20.com/api/public/v1. Specifically:
loadData() / saveData() (in <vault>/.obsidian/plugins/saga20/data.json). It never leaves your machine except as a Bearer token on requests to Saga20.requestUrl so requests honor Obsidian's network handling. No extra fetch shims.If you stop using the plugin, you can remove your API key from settings or delete the plugin folder entirely. Both wipe the stored key.
This plugin is open source and contributions are welcome.
npm run build to confirm it compiles, and open a PR against main. One feature or fix per PR makes review fast.The codebase is small. Quick tour:
manifest.json plugin manifest
main.ts plugin class + settings tab + command wiring
api.ts Saga20 HTTP client (uses Obsidian's requestUrl)
sessions-view.ts left-sidebar ItemView showing the session list
session-view.ts main-pane ItemView rendering the full recap
search-modal.ts FuzzySuggestModal for quick-open / save flows
types.ts shared types and default settings
styles.css plugin styles
version-bump.mjs bumps manifest.json + versions.json on `npm version`
esbuild.config.mjs bundler config
npm install
npm run dev # esbuild watch, rebuilds main.js on save
npm run build # one-shot production build
To test changes against a real vault, point the build at your vault's plugin folder, or symlink <vault>/.obsidian/plugins/saga20/ to your dev checkout.
npm version patch # or minor / major; also rewrites manifest.json + versions.json
npm run build
Then create a GitHub release tagged with the new version and attach manifest.json, main.js, and styles.css so users can install from the release.
If this plugin saves you time, the best thing you can do is try Saga20 and share it with your table. Feedback and bug reports on GitHub help too.
MIT © Saga20
Built by Saga20.