Requires Antinote v2.0.4+ Beta

Extensions

Antinote (v2.0.4+ Beta) allows you to write and use extensions in JavaScript that enable commands that can be invoked with ::. With over 100 official commands, and a growing community of contributors, the possibilities are endless.

Command Types

There are different types of commands, each with different capabilities:

Insert

These commands simply insert something at your cursor position. Perfect for quickly adding dates, templates, random values, UUIDs, and more.

  • Insert today's date or calculate business days
  • Insert templates like to-do lists or meeting notes
  • Generate random numbers, dice rolls, or quotes
  • Create UUIDs or random strings

Replace Line

These commands modify the content of your current line only. Great for formatting or transforming a single line of text.

  • Convert text to UPPERCASE, lowercase, or Title Case
  • Transform to camelCase, snake_case, or kebab-case
  • Trim whitespace or remove quotes

Replace All

These commands modify the content of your entire document. Powerful for bulk operations and text manipulation.

  • Find and replace text throughout the document
  • Sort lines alphabetically or numerically
  • Filter, deduplicate, or remove lines
  • Convert formats (CSV to JSON, lists to comma-separated)
  • AI-powered: polish text, translate, or create lists

Open URL

These commands can open URLs or use URL schemes to trigger actions in other apps on your Mac.

  • Open a random Wikipedia page
  • Launch other apps via URL schemes
  • Trigger automations in apps like Shortcuts or Raycast

LLM Extensions

Extensions can leverage LLMs (Large Language Models) as well, allowing you to quickly take advantage of AI for inserting or modifying text. Just configure your LLM key, and all LLM extensions will be able to leverage it.

Supported providers include:

  • OpenAI (ChatGPT)
  • Anthropic (Claude)
  • Google AI
  • OpenRouter (access multiple models)
  • Ollama (local models)

For more details, see the AI Extensions documentation on GitHub.

API Calls

Extensions can also call custom APIs with API keys stored safely in your macOS Keychain. This allows you to build powerful integrations while keeping your credentials secure.

Key features:

  • Secure credential storage using macOS Keychain
  • Make HTTP requests to any API endpoint
  • Process responses and insert results into your notes
  • Build custom integrations with your favorite services

For more details, see the Network Extensions documentation on GitHub.

Math Functions

Extensions can also leverage the math feature in Antinote to make calculations based on natural language. This makes it easy to perform complex calculations without leaving your notes.

Examples of what you can do:

  • Calculate loan payments and amortization schedules
  • Compute investment growth with compound interest
  • Perform financial analysis (NPV, IRR, etc.)
  • Use math expressions in parameters (e.g., 0.05/12, 30*12)

For more details, see the Extensions documentation on GitHub.

Installing Extensions

Make sure you've downloaded the 2.0.4+ Beta version of Antinote to use extensions.

Steps to install extensions:

  1. Open Antinote and go to Settings
  2. Navigate to the Extensions tab
  3. Browse the official and community extensions available
  4. Click on any extension to add it
  5. The extension will be immediately available for use

You can quickly browse official and community extensions, but any extension you put in the extensions folder can be added. This makes it easy to install custom extensions or ones shared by others.

Tip: Extensions are stored in your extensions folder. You can access this folder from Settings > Extensions > Open Extensions Folder.

Using Commands

In Antinote, simply type :: and the extensions palette will pop up.

How it works:

  1. Type :: anywhere in your note
  2. The extensions palette appears with available commands
  3. As you type, it filters to match your search
  4. Select a command with arrow keys and press Enter
  5. The command shows instructions, required and optional parameters
  6. Fill in the parameters and execute the command

Pro tip: You can type the command name directly after :: to quickly filter, like ::today or ::ai.

Making Your Own

The GitHub repository has everything you need to make your own extensions. Feel free to submit a PR if you want to add an extension to the community collection.

Don't code? No problem.

Use our AI Extension Builder to describe what you want, and we'll generate a prompt you can paste into ChatGPT, Claude, or any coding assistant.

Open AI Extension Builder

Installing Custom Extensions

Once you have the files for your extension:

  1. Go to Settings > Extensions > Open Extensions Folder
  2. Paste your extension's folder into this directory
  3. Go back to Settings and click Reload Extensions
  4. Test your extension by typing :: and searching for your command

Debugging

There is a logging panel in the Extensions settings that shows logs from your extensions. This helps you debug errors and see what's happening when your extension runs.

Extension Structure

Each extension needs at minimum:

  • manifest.json - Extension metadata and configuration
  • index.js - The extension code

AI & ML Extensions

Extensions that leverage artificial intelligence and machine learning to enhance your notes.

AI Providers

Version 1.0.5 | Service Extension

A service extension that provides AI backends to other extensions. This extension has no user-facing commands but enables all AI-powered features in Antinote.

Supported Providers

  • OpenAI - ChatGPT models (GPT-4, GPT-3.5)
  • Anthropic - Claude models
  • Google AI - Gemini models
  • OpenRouter - Access to multiple model providers
  • Ollama - Run local models on your machine

LLM

Version 3.0.5

Generate AI responses to prompts directly in your notes. Use this for brainstorming, writing assistance, answering questions, and more.

::ai insert

Generate an AI response to your prompt

Example: ::ai(What is the capital of France?)

AI Process

Version 1.0.6

Process and transform text using AI. Polish your writing, translate to other languages, or convert text into structured lists.

::polish replaceAll

Improve text professionalism. Level 1 = typos/grammar, 2 = professional email, 3 = formal speech

Example: ::polish or ::polish(2)

::translate replaceAll

Translate text to another language

Example: ::translate or ::translate(French)

::create_list replaceAll

Convert text into a structured list

Example: ::create_list

Date & Time Extensions

Extensions for inserting and working with dates.

Date

Version 1.0.6

Insert dates with optional offsets. Perfect for journaling, planning, and timestamping notes.

::today insert

Insert today's date with optional day offset

Example: ::today or ::today(7) for 7 days from now

::tomorrow insert

Insert tomorrow's date with optional additional offset

Example: ::tomorrow or ::tomorrow(7) for 8 days from now

::yesterday insert

Insert yesterday's date with optional additional offset

Example: ::yesterday or ::yesterday(-7) for 8 days ago

::business_day insert

Insert date offset by business days (excludes weekends)

Example: ::business_day(5) for 5 business days from now

Random Generators

Extensions for generating random values, great for games, writing prompts, decision making, and more.

Random

Version 1.0.6

Generate random numbers, letters, quotes, or open random Wikipedia pages.

::random_number insert

Generate a random number between two values

Example: ::random_number or ::random_number(1, 100)

::random_letters insert

Generate random letter(s)

Example: ::random_letters or ::random_letters(5)

::random_quote insert

Insert a random inspirational quote

Example: ::random_quote

::random_wiki openURL

Open a random Wikipedia page in your browser

Example: ::random_wiki

Dice

Version 1.0.6 | Optional Extension

Roll dice of various types. Perfect for tabletop gaming, random decisions, or probability exercises.

::roll insert

Roll dice. Accepts number (20), die notation (d20), or multiple dice (4d6)

Example: ::roll or ::roll(d20) or ::roll(4d6)

Text Formatting Extensions

Extensions for formatting and transforming text case and style.

Text Format

Version 2.0.1 | Operates on entire document

Transform the entire document's text with various formatting options.

::replace replaceAll

Find and replace text throughout the document

Example: ::replace(old, new)

::append replaceAll

Add text to the end of every line in the document

Example: ::append(;) adds semicolon to each line

::prepend replaceAll

Add text to the beginning of every line in the document

Example: ::prepend(- ) adds dash bullet to each line

::uppercase replaceAll

Convert entire document to UPPERCASE

Example: ::uppercase

::lowercase replaceAll

Convert entire document to lowercase

Example: ::lowercase

::sentence_case replaceAll

Convert document to Sentence case

Example: ::sentence_case

::title_case replaceAll

Convert Document To Title Case

Example: ::title_case

::capitalize_first replaceAll

Capitalize the first letter of the document

Example: ::capitalize_first

::remove_quotes replaceAll

Strip surrounding quotes from the document

Example: ::remove_quotes

Line Format

Version 2.0.0 | Operates on current line only

Transform just the current line with various case and naming convention options.

::uppercase_line replaceLine

Convert current line to UPPERCASE

Example: ::uppercase_line

::lowercase_line replaceLine

Convert current line to lowercase

Example: ::lowercase_line

::sentence_case_line replaceLine

Convert current line to Sentence case

Example: ::sentence_case_line

::title_case_line replaceLine

Convert Current Line To Title Case

Example: ::title_case_line

::camel_case replaceLine

Convert current line to camelCase

Example: ::camel_case (hello world -> helloWorld)

::snake_case replaceLine

Convert current line to snake_case

Example: ::snake_case (Hello World -> hello_world)

::kebab_case replaceLine

Convert current line to kebab-case

Example: ::kebab_case (Hello World -> hello-world)

::remove_quotes_line replaceLine

Strip quotes from the current line

Example: ::remove_quotes_line

Clean Line

Version 1.0.0 | Operates on current line only

Clean up whitespace on the current line.

::remove_all_whitespace replaceLine

Strip all whitespace from the current line

Example: ::remove_all_whitespace

::trim_whitespace replaceLine

Remove leading and trailing whitespace from the current line

Example: ::trim_whitespace

Text Manipulation Extensions

Extensions for sorting, filtering, and manipulating lines of text.

Line Sort

Version 2.0.3

Sort lines in your document alphabetically or numerically.

::sort_lines_alpha replaceAll

Sort lines alphabetically. Options for reverse and skip lines

Example: ::sort_lines_alpha or ::sort_lines_alpha(true) for reverse

::sort_lines_number replaceAll

Sort lines by the first number in each line

Example: ::sort_lines_number

::sort_lines_number_last replaceAll

Sort lines by the last number in each line

Example: ::sort_lines_number_last

::sort_lines_reverse replaceAll

Reverse the order of all lines

Example: ::sort_lines_reverse

Filter Lines

Version 1.0.2

Filter, remove, and manipulate lines based on content or position.

::remove_lines_with replaceAll

Remove all lines containing specific text

Example: ::remove_lines_with(TODO)

::remove_lines_without replaceAll

Remove all lines NOT containing specific text

Example: ::remove_lines_without(important)

::remove_lines_empty replaceAll

Remove all empty lines from the document

Example: ::remove_lines_empty

::keep_lines_with replaceAll

Keep only lines containing specific text

Example: ::keep_lines_with(@mention)

::keep_lines_without replaceAll

Keep only lines NOT containing specific text

Example: ::keep_lines_without(draft)

::trim_each_whitespace replaceAll

Remove leading/trailing whitespace from all lines

Example: ::trim_each_whitespace

::remove_each_after replaceAll

Remove content after a delimiter on each line

Example: ::remove_each_after(:)

::remove_each_before replaceAll

Remove content before a delimiter on each line

Example: ::remove_each_before(:)

::keep_between replaceAll

Keep only content between two delimiters on each line

Example: ::keep_between([, ])

::remove_between replaceAll

Remove content between two delimiters on each line

Example: ::remove_between((, ))

::dedupe_lines replaceAll

Remove duplicate lines, keeping first occurrence

Example: ::dedupe_lines or ::dedupe_lines(false) to keep last

::get_dupes insert

Find and display duplicate lines grouped together

Example: ::get_dupes

List Tools

Version 1.0.1

Convert between different list formats.

::commas_to_list replaceAll

Convert comma-separated items to lines

Example: ::commas_to_list

::commas_to replaceAll

Convert comma-separated items to custom delimiter

Example: ::commas_to(|)

::lines_to_commas replaceAll

Convert lines to comma-separated

Example: ::lines_to_commas

::lines_to replaceAll

Convert lines to custom delimiter

Example: ::lines_to(;)

Checklists

Version 1.0.1

Manage markdown checklists in your notes.

::checked_to_bottom replaceAll

Move all checked items to the bottom of the list

Example: ::checked_to_bottom

::remove_checked replaceAll

Remove all checked items from the document

Example: ::remove_checked

Data Tools Extensions

Extensions for working with structured data like JSON and regular expressions.

JSON Tools

Version 2.0.1 | 15 commands

Powerful tools for manipulating JSON data. Supports smart JSON extraction with dot notation.

Conversion

::csv_to_json replaceAll

Convert CSV data to a JSON array using first row as keys

Example: ::csv_to_json

::json_format replaceAll

Reformat JSON (pretty, compact, or minified)

Example: ::json_format or ::json_format(pretty)

Sorting & Filtering

::json_sort replaceAll

Sort array of objects by a key value

Example: ::json_sort(name) or ::json_sort(age, true) for reverse

::json_sort_array replaceAll

Sort primitive arrays (strings/numbers)

Example: ::json_sort_array or ::json_sort_array(true) for reverse

::json_filter replaceAll

Keep only items matching a condition

Example: ::json_filter(status, =, active)

::json_filter_out replaceAll

Remove items matching a condition

Example: ::json_filter_out(status, =, inactive)

Key Manipulation

::json_add_key replaceAll

Add a key-value pair to all objects in array

Example: ::json_add_key(status, active)

::json_remove_key replaceAll

Remove a key from all objects in array

Example: ::json_remove_key(temp_field)

::json_set_key replaceAll

Set a key to a specific value in all objects

Example: ::json_set_key(version, 2.0)

::json_append_key replaceAll

Append value to the end of existing key values

Example: ::json_append_key(name, _suffix)

::json_prepend_key replaceAll

Prepend value to the beginning of existing key values

Example: ::json_prepend_key(name, prefix_)

Deduplication

::json_get_dupes insert

Find duplicate objects by key or duplicate primitives

Example: ::json_get_dupes or ::json_get_dupes(email)

::json_dedupe replaceAll

Remove exact duplicate objects from array

Example: ::json_dedupe

Path Access (Dot Notation)

::json_get insert

Get value at dot notation path

Example: ::json_get(user.profile.name)

::json_set replaceAll

Set value at dot notation path

Example: ::json_set(user.status, online)

Regex

Version 1.0.1

Use regular expressions to find, remove, or extract text patterns.

::regex_remove replaceAll

Remove all text matching a regex pattern

Example: ::regex_remove(\\d+) removes all numbers

::regex_keep replaceAll

Keep only text matching a regex pattern

Example: ::regex_keep([A-Z]+) keeps only uppercase words

::regex_insert insert

Extract all matches and insert with delimiter

Example: ::regex_insert(\\w+@\\w+\\.\\w+, ,) extracts emails

Finance & Math Extensions

Extensions for financial calculations and analysis. All commands support math expressions in parameters (e.g., 0.05/12, 30*12).

Finance

Version 1.0.5 | 12 commands

Comprehensive financial calculators for loans, investments, and personal finance planning.

Loans & Mortgages

::loan insert

Calculate loan payment and amortization schedule

Example: ::loan(10000, 60, 4) for $10k, 60 months, 4% interest

::mortgage insert

Calculate mortgage payment and schedule

Example: ::mortgage(500000, 20, 6.5, 30) for $500k, 20% down, 6.5%, 30 years

Investment Calculations

::investment insert

Calculate investment growth with contributions, taxes, and inflation

Example: ::investment(10000, 5000, 500, 7, 30) for initial, annual, monthly, rate, years

::pv insert

Present value calculator

Example: ::pv(100000, 10) for future value $100k in 10 years

::fv_simple insert

Future value (simple calculation)

Example: ::fv_simple(10000, 10) for $10k in 10 years

::fv insert

Future value (Excel FV function style)

Example: ::fv(0.05/12, 120, -100, -10000) for rate, nper, pmt, pv

::pmt insert

Payment per period (Excel PMT function)

Example: ::pmt(0.05/12, 360, 500000) for monthly payment on $500k

::npv replaceLine

Net present value from cash flows

Example: ::npv(10, -1000,500,500,500) for 10% rate with cash flows

::irr replaceLine

Internal rate of return

Example: ::irr(-1000,300,400,500) calculates IRR from cash flows

FIRE & Tax Planning

::fire_amount insert

Calculate annual income from investments using safe withdrawal rate

Example: ::fire_amount(1000000) for income from $1M at 4%

::fire_plan insert

Calculate path to financial independence

Example: ::fire_plan(100000, 3000, 5000) for savings, monthly additions, target expenses

::tax insert

Calculate tax and after-tax income

Example: ::tax(100000, 25) for $100k income at 25% rate

Business & Analytics Extensions

Extensions for business metrics, analytics, and startup calculations. Numbers in your note can be comma-separated, space-separated, or line-separated.

Business

Version 1.0.3 | 11 commands

Essential business calculators for growth analysis, SaaS metrics, and decision making.

Growth & Forecasting

::growth insert

Analyze percentage growth between consecutive numbers in your note

Example: ::growth analyzes numbers like: 10, 30, 80

::forecast insert

Forecast future values using linear regression and variance analysis

Example: ::forecast(3) predicts next 3 periods from numbers in note

Marketing & Acquisition

::cac insert

Customer Acquisition Cost calculator template

Example: ::cac inserts a CAC calculation template

::ab_test insert

A/B test statistical significance calculator

Example: ::ab_test inserts an A/B test template

::sample_size insert

Calculate required sample size for A/B tests

Example: ::sample_size inserts a sample size template

Customer Metrics

::retention_churn insert

Retention and churn analysis template

Example: ::retention_churn inserts retention analysis template

::ltv insert

Customer Lifetime Value calculator template

Example: ::ltv inserts an LTV calculation template

::arpu insert

Average Revenue Per User calculator template

Example: ::arpu inserts an ARPU calculation template

::arppu insert

Average Revenue Per Paying User calculator template

Example: ::arppu inserts an ARPPU calculation template

Startup Planning

::runway insert

Cash runway calculator template

Example: ::runway inserts a runway calculation template

::saas_pricing insert

SaaS pricing strategy helper template

Example: ::saas_pricing inserts a pricing strategy template

Productivity Extensions

Extensions for templates and productivity workflows.

Templates

Version 2.0.0 | 16 commands

Insert pre-built templates for common note-taking scenarios. Includes 6 built-in templates plus 10 customizable slots.

Built-in Templates

::todo insert

Daily to-do list with GSD (Getting Stuff Done) framework

Example: ::todo

::bullet insert

Bullet journal template for daily logging

Example: ::bullet

::sorry insert

Apology template for crafting sincere apologies

Example: ::sorry

::reflect insert

Daily reflection template for end-of-day review

Example: ::reflect

::standup insert

Standup meeting template (yesterday, today, blockers)

Example: ::standup

::one_on_one insert

1:1 meeting template with talking points

Example: ::one_on_one

Custom Templates

You can configure up to 10 custom templates in the extension settings. Once configured, they'll be available as:

  • ::custom_template_1
  • ::custom_template_2
  • ::custom_template_3
  • ... through ::custom_template_10

Custom templates support variables like {date}, {time}, and {cursor} to place your cursor after insertion.