Saving & Sharing
Your work saves automatically. Share models with a link, embed them in websites, or remix others' work.
Saving & Autosave
When signed in, your work saves automatically. New models save after 5 seconds of inactivity, and subsequent changes save every 15 seconds. You'll see "Saving..." briefly appear in the header when autosave runs. There's no need to manually save—just build your model and everything persists.
On first save, you'll add a title, description, and icon.
Local drafts
Not signed in? Your work is stored in your browser and restored when you return. Sign in to save permanently and access your models from any device.
View-Only Mode
Creating and editing models is only possible on desktop. On mobile and touch devices, you're in view-only mode and can explore models, run simulations, and inspect results.
When viewing someone else's model or browsing Discover on desktop, you're also in view-only mode. You can explore the model, run simulations, and inspect the results, but you can't make changes until you remix.
Publishing
Publishing makes your model visible in Discover and accessible to anyone with the link. Click Publish in the model header to open the publish dialog.
Before you publish
- Title: Choose a clear, descriptive title that explains what the model does.
- Category: Select the category that best fits your model (Finance, Health, Business, etc.).
- Description: Optional but recommended. A brief description helps others understand your model's purpose.
What happens when you publish
- Your model appears in Discover for others to find and remix
- Anyone can view and run the model without signing in
- Changes you make are reflected immediately in the public version
- You can unpublish at any time to make it private again
Data visibility
When you publish a model containing external data, the values become visible to anyone viewing the model:
- Connection data (e.g.,
@stripe.revenue): Values are cached and shown to viewers. Your API keys and credentials are never exposed. - Data blocks: Any data you've added manually or imported will be visible.
If your model contains connection data or data blocks, you'll be asked to confirm before publishing.
Security note: Only data values are shared—your connection credentials, API keys, and access tokens remain completely private. The cache refreshes automatically to keep public models up-to-date.
Collaboration
Invite others to view or edit your models. Click the Invite button to add collaborators by email. You can add multiple people at once before sending invitations.
Roles
- Viewer: Can view and run the model, inspect results, but cannot modify inputs, logic, or settings. Viewers don't block editors from making changes.
- Commenter: Same as Viewer, plus the ability to add comments, reply to threads, and resolve their own threads. Cannot edit the model or move comment pins.
- Editor: Full editing access to inputs, formulas, and model structure. Can add/remove blocks and connections. Changes save automatically every 2 seconds.
Only the owner can invite or remove collaborators, change roles, and delete the model.
Real-time editing
When multiple editors are working on the same model, Carlo keeps everyone in sync:
- Automatic sync: All changes (including block positions) save and sync automatically every 2 seconds when collaborators are present.
- Smart merge: When two editors make changes to different blocks simultaneously, Carlo automatically merges both sets of changes without conflicts.
- Block locking: When an editor selects a block, other editors see it's being edited and can't modify it until the first editor deselects. Viewers don't lock blocks.
- Presence indicators: See who's online and which block they're editing. Only editors and owners show presence indicators—viewers are to reduce noise.
Connection data for collaborators
If your model uses connection data (like @stripe.revenue or @airtable.users), collaborators don't have access to your actual connections. Instead, they see a cached snapshotof your data from when you last ran the model.
- As an owner: Run your model to refresh the cached data. Collaborators will see a "Live data" indicator reminding you that shared data becomes stale until you run again.
- As a collaborator: You'll see whose data you're using and when it was last refreshed. Ask the owner to run the model for fresher data.
Security note: Collaborators see connection values, not your connection credentials. Your API keys and access tokens remain private.
Comments
Leave feedback directly on the canvas with inline comments. Click the comment button in the toolbar to enter comment mode, then click anywhere on the canvas to place a pin.
Adding comments: In comment mode, click on the canvas to place a speech-bubble pin. Type your comment and press Enter to post. Press Escape to cancel—if you've typed something, you'll be asked to confirm before discarding.
Replying: Click any comment pin to open the thread. Type in the reply field at the bottom and press Enter to add your reply. Threads display all replies in chronological order.
Resolving: Mark a thread as resolved by clicking the checkmark icon in the thread header. Resolved comments show a green indicator on their pin. You can unresolve a thread at any time to reopen the discussion.
Repositioning pins: Owners and editors can drag comment pins to new locations. Click and hold a pin, then drag it to reposition. Pins update in real-time for all collaborators.
Comment permissions
Permissions vary by role:
- Owner & Editor: Add comments, reply, resolve any thread, move any pin, edit/delete own comments.
- Commenter: Add comments, reply, resolve own threads, edit/delete own comments. Cannot move pins or resolve others' threads.
- Viewer: View comments only. Cannot add, reply, or resolve.
Comments sync in real-time across all collaborators. A brief cooldown prevents accidental duplicate posts.
Embedding
Embed models in websites, blogs, or documentation using an iframe. Copy the embed code from the share dialog.
Embeds always show your latest saved version. Any changes you make will automatically appear in all existing embeds once saved.
Connection data in embeds: Embeds use cached connection values for fast loading. Data refreshes automatically in the background when viewers access stale embeds (older than 30 minutes). For always-fresh data, run the simulation in the app to update the cache.
Example
Here's the FIRE Basic calculator embedded directly in these docs:
Embed API
Make your embedded models interactive by enabling parameter overrides. Embedders can pass URL parameters to customize the model inputs.
Enabling parameter overrides
In the Share dialog's Embed tab, toggle Enable parameter overrides. The embed code will include all overridable parameters with their default values.
Parameter naming
Parameters use the block's variable name. For Constant blocks, use the variable name directly. For Variable blocks (distributions), append the distribution parameter with an underscore:
// Constant block with variableName="interest_rate"
const params = new URLSearchParams();
params.set('interest_rate', '0.05');
// Normal distribution with variableName="returns"
params.set('returns_mean', '0.08');
params.set('returns_std', '0.15');
// Triangular distribution with variableName="growth"
params.set('growth_min', '0.02');
params.set('growth_mode', '0.04');
params.set('growth_max', '0.08');
iframe.src = `https://embed.getcarlo.app/your-model?${params.toString()}`//embed.getcarlo.app/your-model?${params.toString()}`;
// Build embed URL with parameter overrides
const embedUrl = `https://embed.getcarlo.app/your-model?interest_rate=0.05&returns_mean=0.08`//embed.getcarlo.app/your-model?interest_rate=0.05&returns_mean=0.08`;
return <iframe src={embedUrl} />;
Auto-run on load
Toggle Auto-run on load to automatically run the simulation when the embed loads. This is useful when you want viewers to immediately see results instead of the model diagram.
// Add autorun=1 to run immediately on load
iframe.src = 'https://embed.getcarlo.app/your-model?autorun=1'//embed.getcarlo.app/your-model?autorun=1';
// Combine with parameter overrides
iframe.src = 'https://embed.getcarlo.app/your-model?autorun=1&interest_rate=0.05&returns_mean=0.08'//embed.getcarlo.app/your-model?autorun=1&interest_rate=0.05&returns_mean=0.08';
const [rate, setRate] = useState(0.05);
const embedUrl = `https://embed.getcarlo.app/your-model?autorun=1&interest_rate=${rate}`//embed.getcarlo.app/your-model?autorun=1&interest_rate=${rate}`;
return (
<>
<input type="range" onChange={(e) => setRate(e.target.value)} />
<iframe src={embedUrl} />
</>
);
Use cases
Parameter overrides enable powerful integrations:
- Connect sliders or inputs on your page to update the iframe dynamically
- Pre-populate with user-specific data from your application
- Create multiple embeds with different scenarios from a single model
- Build interactive calculators powered by Monte Carlo simulation
Remixing
Create your own copy of any public model by clicking the Remix button in the header. Your remixed version becomes an independent model that you own and can modify freely.
If you try to edit a block in view-only mode, you'll be prompted to remix the model first. This protects the original creator's work while giving you full freedom to experiment with your own copy.
Discover
When you open a model from Discover and click Remix, Carlo creates a copy for you. Your changes save to your own model, leaving the original unchanged.
Attribution
Remixes link back to the original model, giving credit to the creator. Creators can see their remix count, helping track the impact of their work.