Add caching to Datagrok functions using meta.cache annotations
Scanned 9/12/2026
Install to Claude Code
npx -y skills add datagrok-ai/public --skill cache-function-results --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Cache Function Results?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/datagrok-ai-cache-function-results)More formats (shields.io, HTML) on the badges page.
---
name: cache-function-results
description: Add caching to Datagrok functions using meta.cache annotations
when-to-use: When user asks to cache function results, add memoization, or optimize repeated computations
effort: low
---
# Cache Function Results
Help the user add caching to Datagrok functions to improve performance by storing results for repeated calls with the same inputs.
## Usage
```
/cache-function-results [function-name] [--mode <client|server|all>]
```
## Instructions
### 1. Choose the cache mode
Add `meta.cache` annotation to the function header:
- `client` — stores results in the browser's IndexedDB
- `server` — stores results on the Datagrok server
- `all` — uses both client and server caches together
### 2. Add caching to a TypeScript/JavaScript function
```typescript
//name: Get Users
//meta.cache: all
//meta.cache.invalidateOn: 0 0 * * *
//output: dataframe result
export async function getUsers(): Promise<DG.DataFrame> {
// Expensive operation — results will be cached
}
```
### 3. Add caching to a Python/R script
```python
#name: Example
#language: python
#meta.cache: client
#meta.cache.invalidateOn: 0 * * * *
#input: string table [Data table]
#output: int result
...
```
### 4. Add caching to a SQL query
```sql
--name: ActivityDetails
--connection: Chembl
--meta.cache: all
--meta.cache.invalidateOn: 0 0 * * *
--input: string target = "CHEMBL1827"
SELECT * FROM activity_details WHERE target_id = @target
--end
```
### 5. Set cache invalidation
Use `meta.cache.invalidateOn` with a cron expression to control when cached results expire:
| Cron expression | Meaning |
|----------------|---------|
| `0 * * * *` | Every hour |
| `0 0 * * *` | Every day at midnight |
| `0 0 * * 1` | Every Monday at midnight |
| `0 0 1 * *` | First day of each month |
If `meta.cache.invalidateOn` is not specified, the cache never expires automatically.
### 6. Cache all queries under a connection
Instead of annotating each query, enable caching at the connection level:
**Via UI:** Right-click the connection > **Edit...** > check **Cache Results** and optionally fill **Invalidate On**.
**Via connection JSON:**
```json
{
"name": "Northwind",
"parameters": {
"server": "db.example.com",
"port": 5432,
"db": "mydb",
"cacheResults": true,
"cacheSchema": false
}
}
```
### 7. Client-side cache limits
- Function output must be scalar (int, float, string) or dataframe, graphics, datetime
- Maximum cache size per function: 100 MB
- Maximum record count: 100,000
- Users enable it in **Settings > Cache > Client-side cache**
### 8. Server-side cache
- No restrictions on size or parameter types
- Users enable it in **Settings > Cache > Server-side cache**
- Works together with client-side cache when mode is `all`
## Behavior
- Default to `meta.cache: all` unless the user specifies a preference.
- Always suggest adding `meta.cache.invalidateOn` with an appropriate schedule — warn that without it the cache never refreshes.
- Only recommend caching for functions that are immutable (same input produces same output).
- Warn against caching database queries when the underlying data changes frequently.
- For connection-level caching, mention that it applies to all queries under that connection.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!