A command-line interface for Are.na.
npm install -g @aredotna/cli
Requires Node.js 20 or later.
npm update -g @aredotna/cli
arena login
Opens your browser to authorize via OAuth. Your token is stored locally and used for subsequent requests.
arena logout
Running arena with no arguments opens an interactive session. Pass a command for direct access.
arena login
arena whoami
arena feed --limit 10
arena search "brutalist architecture" --type Image
arena channel worldmaking
arena add my-channel "Hello world"
arena upload photo.jpg --channel my-channel
arena --help shows a concise overview and common workflows.arena help <command> shows command-specific help.arena <command> --help also shows command-specific help.Examples:
arena help search
arena channel --help
arena channel contents --help
| Flag | Description |
|---|---|
--json |
Output as JSON (import --json streams NDJSON) |
--quiet |
Compact JSON output when supported |
--yes |
Bypass destructive confirmation prompts |
--help |
Show help |
stdout:--json returns JSON objects; import --json returns NDJSON progress events.--quiet only changes JSON formatting (compact, single-line); it does not change response fields.stderr:--json mode.{"error": string, "code": number | null, "type": string, "hint"?: string}type values include: unknown_command, unknown_subcommand, json_not_supported, API-derived types like not_found.0 success1 client/usage errors and unknown command/subcommand2 unauthorized (401)3 not found (404)4 validation/bad request (400, 422)5 rate limited (429)6 forbidden (403)stdin and stdout are TTYs.batch is JSON-only; use --json.add), use --json.Examples are shown first, then options.
loginAuthenticate via OAuth.
Examples:
arena login
Options:
--token <token>whoamiShow current authenticated user.
Examples:
arena whoami
Options:
logoutClear local auth token.
Examples:
arena logout
Options:
searchSearch across blocks, channels, users, and groups.
Examples:
arena search "brutalist architecture"
arena search "photography" --type Image
arena search "design" --scope my
arena search "*" --type Attachment --ext pdf
arena search "architecture" --sort created_at_desc
arena search "*" --sort random --seed 42
arena search "*" --channel-id 789
Options:
--page <n>--per <n>--type <t>--scope <all|my|following>--sort <s>--ext <ext>--after <iso8601>--seed <n>--user-id <id>--group-id <id>--channel-id <id>channelView channel details.
Examples:
arena channel worldmaking
Options:
--page <n>--per <n>channel contentsList channel contents.
Examples:
arena channel contents worldmaking
arena channel contents worldmaking --sort updated_at_desc --user-id 123
Options:
--page <n>--per <n>--sort <s>--user-id <id>channel createCreate a channel.
Examples:
arena channel create "My Research" --visibility private
arena channel create "Team Notes" --group-id 123
Options:
--visibility <public|private|closed>--description <text>--group-id <id>channel updateUpdate a channel.
Examples:
arena channel update my-research --title "New Title" --description "Updated"
Options:
--title <text>--description <text>--visibility <public|private|closed>channel deleteDelete a channel.
Examples:
arena channel delete my-research
Options:
channel connectionsShow where a channel appears.
Examples:
arena channel connections worldmaking --sort connected_at_desc
Options:
--page <n>--per <n>--sort <s>channel followersList channel followers.
Examples:
arena channel followers worldmaking --sort connected_at_desc
Options:
--page <n>--per <n>--sort <s>blockView a block.
Examples:
arena block 12345
Options:
block updateUpdate block metadata/content.
Examples:
arena block update 12345 --title "New Title"
Options:
--title <text>--description <text>--content <text>--alt-text <text>block commentsList block comments.
Examples:
arena block comments 12345 --sort connected_at_desc
Options:
--page <n>--per <n>--sort <s>block connectionsShow channels connected to a block.
Examples:
arena block connections 12345 --sort connected_at_desc --filter OWN
Options:
--page <n>--per <n>--sort <s>--filter <ALL|OWN|EXCLUDE_OWN>addAdd text/URL content to a channel.
Examples:
arena add my-channel "Hello world"
arena add my-channel "Hello" --title "Greeting" --description "Pinned note"
arena add my-channel https://example.com --alt-text "Cover image" --insert-at 1
arena add my-channel https://example.com --original-source-url https://source.com --original-source-title "Original"
echo "piped text" | arena --json add my-channel
Options:
--title <text>--description <text>--alt-text <text>--original-source-url <url>--original-source-title <text>--insert-at <n>uploadUpload local file content.
Examples:
arena upload photo.jpg --channel my-channel
arena upload photo.jpg --channel my-channel --title "Cover" --description "Homepage image"
Options:
--channel <slug|id> (required)--title <text>--description <text>batchCreate many blocks asynchronously.
batch is available in --json mode.
Examples:
arena batch my-channel "https://a.com" "https://b.com"
arena batch status 1234
Options:
--title <text>--description <text>importImport local files in bulk.
Examples:
arena import my-channel --dir ./assets
arena import my-channel --dir ./assets --recursive
arena import my-channel --interactive
Options:
--dir <path>--recursive--interactive--batch-size <n>--upload-concurrency <n>--poll-interval <ms>connectConnect a block/channel to a channel.
Examples:
arena connect 12345 my-channel
arena connect 12345 my-channel --type Channel --position 1
Options:
--type <Block|Channel>--position <n>connectionInspect/delete/move connections.
Examples:
arena connection 67890
arena connection delete 67890
arena connection move 67890 --movement move_to_top
arena connection move 67890 --movement insert_at --position 1
Options:
--movement <move_to_top|move_to_bottom|insert_at> (for connection move)--position <n> (for connection move)commentCreate or delete comments.
Examples:
arena comment 12345 "Nice find"
arena comment delete 67890
Options:
userView users and relationships.
Examples:
arena user damon-zucconi
arena user contents damon-zucconi --type Image --sort updated_at_desc
arena user followers damon-zucconi --sort connected_at_desc
arena user following damon-zucconi --type User --sort connected_at_desc
Options:
--page <n>--per <n>--type <t>--sort <s>groupView and manage groups and group activity.
Examples:
arena group are-na-team
arena group create "Research Studio"
arena group update research-studio --name "Studio Notes"
arena group members are-na-team
arena group invite research-studio --email person@example.com
arena group create-invite-link research-studio
arena group contents are-na-team --type Image --sort updated_at_desc
arena group followers are-na-team --sort connected_at_desc
Options:
--description <text> (for group create/group update)--avatar-url <url> (for group create/group update)--name <text> (for group update)--invite-token <token> (for group join)--user-id <id> (for group invite)--email <addr> (for group invite)--page <n>--per <n>--type <t>--sort <s>Subcommands:
group create <name>group update <slug>group delete <slug>group members <slug>group join <slug>group leave <slug>group remove-member <slug> <user_id>group invitations <slug>group invite <slug>group revoke-invitation <slug> <invitation_id>group invite-link <slug>group create-invite-link <slug>group delete-invite-link <slug>group contents <slug>group followers <slug>feedShow your authenticated feed.
Examples:
arena feed --limit 10
arena feed --next <cursor>
Options:
--limit <n>--next <cursor>--prev <cursor>notificationsShow and manage your notifications.
Examples:
arena notifications --unread
arena notifications read 12345
arena notifications read-all
Options:
--limit <n>--next <cursor>--prev <cursor>--unreadpingCheck API health.
Examples:
arena ping
Options:
| Alias | Command |
|---|---|
ch |
channel |
bl |
block |
me |
whoami |
s |
search |
git clone https://github.com/aredotna/cli.git
cd cli
npm install
cp .env.example .env # Configure API base URL
npm run dev # Run from source
npm run check # Typecheck + test + build
Tests use a file-based VCR to record and replay API responses.
npm test # Run tests (auto mode — records if no cassette)
ARENA_VCR_MODE=replay npm test # Strict replay (no network, used in CI)
rm .vcr/registry-test.json && npm test # Re-record cassettes