riverpod-auto-dispose
Enable automatic disposal of Riverpod providers when they have no listeners; keepAlive, onDispose, invalidate, ref.keepAlive.
Skill by serverpod
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/serverpod-riverpod-auto-dispose
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/riverpod-auto-dispose
What's inside
- Skill name
riverpod-auto-dispose- Description
- Enable automatic disposal of Riverpod providers when they have no listeners; keepAlive, onDispose, invalidate, ref.keepAlive. Use when preventing memory leaks, caching only while used, or cleaning up resources when a provider is no longer needed. Use this skill when the user asks about auto-dispose, keepAlive, or when to dispose Riverpod state.
- License
- BSD-3-Clause
- Instructions
- 62 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Riverpod — Automatic disposal
## Instructions
With **automatic disposal** enabled, Riverpod destroys a provider's state when it has no listeners for one frame. This frees memory and stops work (e.g. network requests) when the provider is no longer used.
### Enabling
- **Code generation:** Enabled by default. Disable with `@Riverpod(keepAlive: true)`.
- **Manual:** Add `isAutoDispose: true` when creating the provider (e.g. `Provider.autoDispose(...)` or `FutureProvider.autoDispose(...)`).
```dart
// Codegen: disable auto-dispose
@Riverpod(keepAlive: true)
String helloWorld(Ref ref) => 'Hello world!';
// Manual: enable
final helloWorldProvider = Provider<String>(
isAutoDispose: true,
(ref) => 'Hello world!',
);
```
When a provider has **parameters** (family), enable auto-dispose to avoid caching every parameter combination forever and causing memory leaks.
### When disposal runs
Riverpod counts listeners (from ref.watch, ref.listen, etc.). When the count reaches zero, it waits one frame; if still zero, **ref.onCancel** runs, then the state is destroyed and **ref.onDispose** runs.
### Reacting to disposal: ref.onDispose
Register a callback when the state is destroyed (e.g. close a StreamController):
```dart
final provider = StreamProvider<int>((ref) {
final controller = StreamController<int>();
ref.onDispose(controller.close);
return controller.stream;
});
```
Do not trigger side effects that modify other providers inside onDispose. You can call onDispose multiple times. Other lifecycles: **ref.onCancel** (last listener removed), **ref.onResume** (new listener added after cancel).
### Forcing destruction: ref.invalidate
From a widget or another provider, call **ref.invalidate(provider)** to destroy the current state. If the provider is still listened to, it will recompute; otherwise it stays destroyed until read again.
```dart
onPressed: () => ref.invalidate(someProvider),
```
For family providers you can invalidate one parameter combination or all (see riverpod-family and docs).
### Keeping state alive: ref.keepAlive
When auto-dispose is enabled, you can call **ref.keepAlive()** to prevent disposal until the next recomputation. Use to keep successful results alive while allowing failed or unused state to be disposed. The return value can be called to revert to automatic disposal. If the provider is recomputed, auto-dispose is re-enabled.
### Caching for a duration
Riverpod does not provide a built-in "cache for X seconds". You can implement it with a Timer and ref.keepAlive, or use ref.onCancel/onResume to dispose after a period of no listeners.From serverpod/skills-registry, BSD-3-Clause.
More from serverpod/skills-registry
- 0.475score
riverpod-faq-and-practices
serverpod
Answers Riverpod FAQ (ref.refresh vs invalidate, ConsumerWidget vs StatelessWidget, Ref vs WidgetRef, reset all providers, ref after unmount) and do/don't…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-getting-started
serverpod
Install Riverpod (flutter_riverpod or riverpod), wrap the app in ProviderScope, run a hello-world provider, and optionally enable riverpod_lint and code…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-eager-initialization
serverpod
Eagerly initialize Riverpod providers at app startup by watching them in a root Consumer; handle loading/error in the initializer, AsyncValue.requireValue.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-family
serverpod
Use Riverpod family providers to pass parameters and cache per parameter; FutureProvider.family, NotifierProvider.family, autoDispose with family, overriding…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-containers
serverpod
Use ProviderScope in Flutter and ProviderContainer in Dart for Riverpod; where provider state is stored, overrides, observers, testing with…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-from-provider
serverpod
Migrate from package:provider to Riverpod; ChangeNotifierProvider, ProxyProvider to ref.watch, context.watch to ref.watch, ConsumerWidget, incremental…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-testing
serverpod
Test Riverpod providers and widgets; ProviderContainer.test, unit tests, widget tests with ProviderScope, tester.container(), mocking with overrides…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-3-0-migration
serverpod
Migrate Riverpod from 2.0 to 3.0; automatic retry, paused listeners, legacy providers import, Ref simplification, FamilyNotifier removal, ProviderException…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-cancel
serverpod
Cancel or debounce Riverpod async requests with ref.onDispose; cancel when user leaves the page, debounce rapid refreshes.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-codegen-and-hooks
serverpod
Use Riverpod code generation (@riverpod, riverpod_generator) and hooks (hooks_riverpod, HookConsumerWidget, flutter_hooks with Riverpod).
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-consumers
serverpod
Use Riverpod Consumer, ConsumerWidget, and ConsumerStatefulWidget to read and watch providers in widgets; WidgetRef, builder ref parameter.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-migration
serverpod
Migrate Riverpod from StateNotifier to Notifier/AsyncNotifier, from ChangeNotifier to AsyncNotifier, or upgrade from 0.13/0.14/1.0; ref.onDispose, family…
SkillDFreshness: D★ 10Claude Code +9
Signals
- Stars
- 10
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Mar 7, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- BSD-3-Clause
- Repository
- github.com/serverpod/skills-registry
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from serverpod
- 0.475score
riverpod-cancel
serverpod
Cancel or debounce Riverpod async requests with ref.onDispose; cancel when user leaves the page, debounce rapid refreshes.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-consumers
serverpod
Use Riverpod Consumer, ConsumerWidget, and ConsumerStatefulWidget to read and watch providers in widgets; WidgetRef, builder ref parameter.
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-testing
serverpod
Test Riverpod providers and widgets; ProviderContainer.test, unit tests, widget tests with ProviderScope, tester.container(), mocking with overrides…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-3-0-migration
serverpod
Migrate Riverpod from 2.0 to 3.0; automatic retry, paused listeners, legacy providers import, Ref simplification, FamilyNotifier removal, ProviderException…
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-codegen-and-hooks
serverpod
Use Riverpod code generation (@riverpod, riverpod_generator) and hooks (hooks_riverpod, HookConsumerWidget, flutter_hooks with Riverpod).
SkillDFreshness: D★ 10Claude Code +9 - 0.475score
riverpod-containers
serverpod
Use ProviderScope in Flutter and ProviderContainer in Dart for Riverpod; where provider state is stored, overrides, observers, testing with…
SkillDFreshness: D★ 10Claude Code +9
Cite this page
riverpod-auto-dispose skill. Agent Mart. https://agentmart.dev/skills/serverpod-riverpod-auto-dispose (last updated 2026-10-24)