Deterministic, one-way import from Are.na into your Obsidian vault.
One-way only: Are.na → Obsidian • Manual runs • Dry-run previews • User-controlled output
Tetromino brings channels, blocks, metadata, and attachments into your vault as stable Markdown notes. It is designed for clarity and control: same input, same output, no automatic imports, and no push-back to Are.na. Optional sync-on-startup / interval settings exist but stay off until you enable them.
API compatibility targets the current Are.na REST API v3 documentation: https://www.are.na/developers/explore.
Published docs: https://frostmute.github.io/Tetromino/
- Docs site: https://frostmute.github.io/Tetromino/
- For users: User Guide | Settings Reference | FAQ | Troubleshooting
- For developers: Developer Guide | API Design | ADRs
- Project docs: CHANGELOG | ROADMAP | PHILOSOPHY | SECURITY | CONTRIBUTING | FIRST_CONTRIBUTION | CODE OF CONDUCT | CONTRIBUTORS | MAINTAINERS | COMMUNITY HEALTH | COMMUNITY CELEBRATION | COMMUNITY SURVEY
- CI and releases: CI workflow | Release workflow | Pages workflow | Release template
- Planning and reporting: Project board | Bug report template
- Community: GitHub Discussions
- It is a deterministic importer from Are.na to Obsidian.
- It is vault-first, manual, and transparent: nothing imports unless you run a command (or click the ribbon).
- It is not a two-way sync engine.
- It does not auto-delete local notes when remote blocks disappear.
- Optional sync-on-startup and sync-interval exist for power users, but both are off by default (
syncOnStartup: false,syncInterval: 0).
- Imports mapped Are.na channels into mapped vault folders.
- Supports full pagination for large channels (not limited to the first 100 blocks).
- Retries transient upstream failures (
429,500,502,503,504) with backoff. - Shows status bar progress for channels and block pages.
- Learn more: User Guide — First Import | API Design — Retry Budget
- Writes stable Markdown notes for blocks.
- Rewrites existing notes when remote block content changes.
- Writes channel index notes and a master overview note (
Are.na/overview.md). - Supports channel index naming mode for Folder Note compatibility (
index.mdor folder-name note). - Sync summary modal with per-file diff viewer after every import or dry-run.
- Learn more: ADR-003 — Deterministic Output | User Guide — Dry-Run
- Banner frontmatter field for Banners plugin compatibility (
enabled, custom key, source priority). - Block description in frontmatter (
arena_description). - Block comments in a dedicated
Commentssection. - Connected channel list (
This block appears in) with external links. - Best-effort preview image for Channel blocks.
- Learn more: Settings Reference — Enrichments
- Optional custom template system for full control over generated Markdown.
- Handlebars-like syntax:
{{title}},{{#if image}}...{{/if}},{{#each comments}}...{{/each}}. - Template variables include:
title,id,class,content,description,image,arena_url,source_url,channel_title,channel_slug,comments,connected_channels. - Enabled via plugin data (
templateEnabled/templateString); not yet exposed in the Settings tab UI. - Learn more: Settings Reference — Custom Templates
- Image handling modes:
download,embed,link. - Non-image attachment handling modes:
download,link. - Downloaded attachment rendering:
linkorembed. - Storage modes: channel-local, global folder, custom folder.
- Per-channel storage overrides.
- Migration tools with preview, diff, execution, and history logging.
- Learn more: Settings Reference — Content Rendering | Settings Reference — Attachment Migration
Import my channelsto bulk-create mappings from your Are.na account.Auto-enable imported channelstoggle for granular control.- Backup, restore, and reset tools for channel mappings.
Restore from file...to pick a specific historical backup instead of only the latest.- Default mapping target folder:
Are.na/<channel-slug>unless overridden. - Learn more: User Guide — Channel Management | Settings Reference — Channel Management
Available from the Obsidian Command Palette (Ctrl/Cmd + P):
Import all channels nowPreview import (dry-run)Import current channelPreview current channel import (dry-run)Open channel on Are.naPreview attachment migrationRun attachment migration
- API token with verify action.
- Block file naming (
title,id,title-id). - Banner frontmatter options (
enabled, field name, image source priority). - Optional enrichments (description, comments, connected channels, channel preview image).
- Image and attachment rendering controls.
- Attachment storage controls (global defaults and per-channel overrides).
- Optional enrichments and channel index naming.
- Exclude block classes (skip selected Are.na block types).
- Template engine via plugin data (advanced; not yet in Settings UI).
- Frontmatter, notifications, and debug logging toggles.
- Channel mapping management and migration actions.
- Full reference: Settings Reference
- Create mappings manually or use
Import my channelsin settings. - Run
Import all channels nowor a dry-run preview command. - The plugin fetches channel metadata and all paginated blocks from Are.na.
- It normalizes each block into deterministic Markdown output.
- It compares planned output against existing vault files.
- It writes updated notes, indexes, and overview files.
- It shows a sync summary with diffs for changed files.
- It records import state and timestamps in plugin data.
Detailed walkthrough: User Guide — First Import
Browse the published documentation: https://frostmute.github.io/Tetromino/
New to Tetromino? Start here:
- User Guide — Overview, installation, first import walkthrough, dry-run explanation, settings overview, troubleshooting, and FAQ.
- Settings Reference — Every setting explained with defaults, examples, and advanced template syntax.
- Troubleshooting — Common errors, solutions, and how to collect logs for bug reports.
- FAQ — Answers to the most common questions about sync behavior, security, and offline usage.
Want to contribute or understand the internals?
- Developer Guide — Architecture overview, module guide, code style, and how to add features or tests.
- API Design — Are.na API integration details, pagination, rate limiting, retry logic, and response normalization.
- ADRs — Architecture Decision Records documenting key design choices (one-way import, manual triggers, deterministic output, Markdown-only format, dry-run previews).
- Open Settings → Community Plugins in Obsidian.
- Search for "Tetromino" in the Community Plugins browser.
- Click Install, then Enable.
- Open Tetromino settings and add your Are.na API token.
- Add at least one channel mapping, or run
Import my channels.
Plugin directory: https://community.obsidian.md/plugins/tetromino
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - Place them into
<your-vault>/.obsidian/plugins/tetromino/. - Enable Tetromino in Obsidian Community Plugins.
- Open settings and add your API token.
- Add at least one channel mapping, or run
Import my channels.
npm install
npm run devBuild:
npm run buildBuild output:
main.jsin the repository root.dist/<plugin-id>-<version>.zipwithmain.js,manifest.json, andstyles.css.
Quality checks:
npm run lint
npm testContributor resources: Developer Guide | CONTRIBUTING | First-Time Contributor Guide
If you are looking for a similar tool that imports Raindrop.io bookmarks instead of Are.na blocks, check out Make It Rain, the sister-tool to this plugin built on the same core sync engine and template parsing logic.
- API tokens are masked in the UI and stored in Obsidian plugin data.
- The plugin collects no telemetry.
- External requests are limited to Are.na API and direct file URLs required for configured downloads.
For details, see SECURITY.md.
- Generate a token at https://www.are.na/developers/personal-access-tokens.
- Paste it into settings and click
Verify. - Ensure the token includes read access.
- Large channels can take several minutes due to API rate limits and pagination.
- Enable debug logging to monitor progress.
- Start with a smaller channel to verify configuration.
- Run
Import all channels nowfrom the Command Palette. - Confirm the channel mapping is enabled in settings.
- Set image or attachment handling to
Download to vault. - Confirm attachment folders are valid and writable.
- Verify disk space.
- Verify the channel mapping is enabled in settings.
- Check that the channel is public (or your token has access to private channels).
- Enable debug logging to see pagination progress in the console.
Full troubleshooting guide: docs/TROUBLESHOOTING.md
Tetromino is maintained by Jonathan J Wagner. We welcome contributions of all kinds — code, documentation, bug reports, and community support.
- Want to contribute? See FIRST_CONTRIBUTION.md for a step-by-step guide.
- Looking for a first issue? Browse
good first issuelabels. - All contributors: See CONTRIBUTORS.md for the full list.
First-time contributors are thanked by name in release notes.
MIT
See CHANGELOG.md for a complete version history.
- v1.1.1 (2026-07-16) — Version bump for Obsidian community plugins directory re-scan (no source changes).
- v1.1.0 (2025-06-26) — Sync summary modal, overview note generation, attachment migration, channel management tools, banner frontmatter, block enrichment, channel index enhancements, optional background sync, and numerous security and performance fixes.
- v1.0.0 (2025-01-15) — Initial stable release with deterministic Are.na → Obsidian import, pagination, retries, stable Markdown output, and attachment support.
