
Rxjs Implementation
- 34 installs
- 5 repo stars
- Updated January 7, 2026
- pluginagentmarketplace/custom-plugin-angular
rxjs-implementation is a Claude Code skill for ai & agent building.
About
rxjs-implementation is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- rxjs-implementation
- AI & Agent Building
- AI-coding skill
Rxjs Implementation by the numbers
- 34 all-time installs (skills.sh)
- Ranked #8,822 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-angular --skill rxjs-implementationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 34 |
|---|---|
| repo stars | ★ 5 |
| Last updated | January 7, 2026 |
| Repository | pluginagentmarketplace/custom-plugin-angular ↗ |
How do I helps with ai & agent building tasks.?
Helps with ai & agent building tasks.
Who is it for?
Best when you're working on ai & agent building and need structured help with rxjs implementation.
Skip if: Teams with no ai & agent building needs, or anyone wanting a generic chat assistant without this specific workflow.
When should I use this skill?
When you need to helps with ai & agent building tasks., or when rxjs-implementation is a claude code skill for ai & agent building.
What you get
Structured output aligned to rxjs-implementation: rxjs-implementation, AI & Agent Building.
Files
RxJS Implementation Skill
Quick Start
Observable Basics
import { Observable } from 'rxjs';
// Create observable
const observable = new Observable((observer) => {
observer.next(1);
observer.next(2);
observer.next(3);
observer.complete();
});
// Subscribe
const subscription = observable.subscribe({
next: (value) => console.log(value),
error: (error) => console.error(error),
complete: () => console.log('Done')
});
// Unsubscribe
subscription.unsubscribe();Common Operators
import { map, filter, switchMap, takeUntil } from 'rxjs/operators';
// Transformation
data$.pipe(
map(user => user.name),
filter(name => name.length > 0)
).subscribe(name => console.log(name));
// Higher-order
userId$.pipe(
switchMap(id => this.userService.getUser(id))
).subscribe(user => console.log(user));Subjects
Subject Types
import { Subject, BehaviorSubject, ReplaySubject } from 'rxjs';
// Subject - No initial value
const subject = new Subject<string>();
subject.next('hello');
// BehaviorSubject - Has initial value
const behavior = new BehaviorSubject<string>('initial');
behavior.next('new value');
// ReplaySubject - Replays N values
const replay = new ReplaySubject<string>(3);
replay.next('one');
replay.next('two');Service with Subject
@Injectable()
export class NotificationService {
private messageSubject = new Subject<string>();
public message$ = this.messageSubject.asObservable();
notify(message: string) {
this.messageSubject.next(message);
}
}
// Usage
constructor(private notification: NotificationService) {
this.notification.message$.subscribe(msg => {
console.log('Notification:', msg);
});
}Transformation Operators
// map - Transform values
source$.pipe(
map(user => user.name)
)
// switchMap - Switch to new observable (cancel previous)
userId$.pipe(
switchMap(id => this.userService.getUser(id))
)
// mergeMap - Merge all results
fileIds$.pipe(
mergeMap(id => this.downloadFile(id))
)
// concatMap - Sequential processing
tasks$.pipe(
concatMap(task => this.processTask(task))
)
// exhaustMap - Ignore new while processing
clicks$.pipe(
exhaustMap(() => this.longRequest())
)Filtering Operators
// filter - Only pass matching values
data$.pipe(
filter(item => item.active)
)
// first - Take first value
data$.pipe(first())
// take - Take N values
data$.pipe(take(5))
// takeUntil - Take until condition
data$.pipe(
takeUntil(this.destroy$)
)
// distinct - Filter duplicates
data$.pipe(
distinct(),
distinctUntilChanged()
)
// debounceTime - Wait N ms
input$.pipe(
debounceTime(300),
distinctUntilChanged()
)Combination Operators
import { combineLatest, merge, concat, zip } from 'rxjs';
// combineLatest - Latest from all
combineLatest([user$, settings$, theme$]).pipe(
map(([user, settings, theme]) => ({ user, settings, theme }))
)
// merge - Values from any
merge(click$, hover$, input$)
// concat - Sequential
concat(request1$, request2$, request3$)
// zip - Wait for all
zip(form1$, form2$, form3$)
// withLatestFrom - Combine with latest
click$.pipe(
withLatestFrom(user$),
map(([click, user]) => ({ click, user }))
)Error Handling
// catchError - Handle errors
data$.pipe(
catchError(error => {
console.error('Error:', error);
return of(defaultValue);
})
)
// retry - Retry on error
request$.pipe(
retry(3),
catchError(error => throwError(error))
)
// timeout - Timeout if no value
request$.pipe(
timeout(5000),
catchError(error => of(null))
)Memory Leak Prevention
Unsubscribe Pattern
private destroy$ = new Subject<void>();
ngOnInit() {
this.data$.pipe(
takeUntil(this.destroy$)
).subscribe(data => {
this.processData(data);
});
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}Async Pipe (Preferred)
// Component
export class UserComponent {
user$ = this.userService.getUser(1);
constructor(private userService: UserService) {}
}
// Template - Async pipe handles unsubscribe
<div>{{ user$ | async as user }}
<p>{{ user.name }}</p>
</div>Advanced Patterns
Share Operator
// Hot observable - Share single subscription
readonly users$ = this.http.get('/api/users').pipe(
shareReplay(1) // Cache last result
);
// Now multiple subscriptions use same HTTP request
this.users$.subscribe(users => {...});
this.users$.subscribe(users => {...}); // Reuses cachedScan for State
// Accumulate state
const counter$ = clicks$.pipe(
scan((count) => count + 1, 0)
)
// Complex state
const appState$ = actions$.pipe(
scan((state, action) => {
switch(action.type) {
case 'ADD_USER': return { ...state, users: [...state.users, action.user] };
case 'DELETE_USER': return { ...state, users: state.users.filter(u => u.id !== action.id) };
default: return state;
}
}, initialState)
)Forkjoin for Multiple Requests
// Parallel requests
forkJoin({
users: this.userService.getUsers(),
settings: this.settingService.getSettings(),
themes: this.themeService.getThemes()
}).subscribe(({ users, settings, themes }) => {
console.log('All loaded:', users, settings, themes);
})Testing Observables
import { marbles } from 'rxjs-marbles';
it('should map values correctly', marbles((m) => {
const source = m.hot('a-b-|', { a: 1, b: 2 });
const expected = m.cold('x-y-|', { x: 2, y: 4 });
const result = source.pipe(
map(x => x * 2)
);
m.expect(result).toBeObservable(expected);
}));Best Practices
1. Always unsubscribe: Use takeUntil or async pipe 2. Use higher-order operators: switchMap, mergeMap, etc. 3. Avoid nested subscriptions: Use operators instead 4. Share subscriptions: Use share/shareReplay for expensive operations 5. Handle errors: Always include catchError 6. Type your observables: Observable<User> not just Observable
Common Mistakes to Avoid
// ❌ Wrong - Creates multiple subscriptions
this.data$.subscribe(d => {
this.data$.subscribe(d2 => {
// nested subscriptions!
});
});
// ✅ Correct - Use switchMap
this.data$.pipe(
switchMap(d => this.otherService.fetch(d))
).subscribe(result => {
// handled
});
// ❌ Wrong - Memory leak
ngOnInit() {
this.data$.subscribe(data => this.data = data);
}
// ✅ Correct - Unsubscribe or async
ngOnInit() {
this.data$ = this.service.getData();
}
// In template: {{ data$ | async }}Resources
angular_skill: rxjs
# RxJS Operators Configuration
# Common operator patterns for Angular applications
transformation_operators:
- name: map
use_case: "Transform emitted values"
example: "map(user => user.name)"
- name: switchMap
use_case: "Switch to new observable, cancel previous"
example: "switchMap(id => this.service.get(id))"
- name: mergeMap
use_case: "Merge all emissions"
example: "mergeMap(id => this.download(id))"
- name: concatMap
use_case: "Sequential processing"
example: "concatMap(task => this.process(task))"
filtering_operators:
- name: filter
use_case: "Filter values"
example: "filter(x => x > 0)"
- name: debounceTime
use_case: "Wait for pause in emissions"
example: "debounceTime(300)"
- name: distinctUntilChanged
use_case: "Emit only if different from previous"
example: "distinctUntilChanged()"
- name: takeUntil
use_case: "Complete on signal"
example: "takeUntil(this.destroy$)"
combination_operators:
- name: combineLatest
use_case: "Latest values from all sources"
example: "combineLatest([a$, b$, c$])"
- name: forkJoin
use_case: "Wait for all to complete"
example: "forkJoin({users: users$, posts: posts$})"
- name: merge
use_case: "Combine multiple streams"
example: "merge(click$, hover$)"
error_handling:
- name: catchError
use_case: "Handle errors"
example: "catchError(err => of(fallback))"
- name: retry
use_case: "Retry on error"
example: "retry(3)"
Assets
Templates and reusable assets for rxjs skill.
rxjs Guide
RxJS Operators Quick Reference
Transformation Operators
| Operator | Description | When to Use |
|---|---|---|
map | Transform each value | Simple value transformation |
switchMap | Switch to new stream | HTTP requests, search |
mergeMap | Flatten all | Parallel requests |
concatMap | Sequential flatten | Order matters |
exhaustMap | Ignore while busy | Button clicks |
Filtering Operators
| Operator | Description | When to Use |
|---|---|---|
filter | Pass matching values | Conditional logic |
take(n) | Take first n values | Limited emissions |
takeUntil | Complete on signal | Cleanup subscriptions |
first | First value only | Single emission |
debounceTime | Wait for pause | Search input |
distinctUntilChanged | Skip duplicates | Prevent redundant |
Memory Leak Prevention Pattern
private destroy$ = new Subject<void>();
ngOnInit() {
this.data$.pipe(
takeUntil(this.destroy$)
).subscribe();
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}References
Documentation references for rxjs skill.
#!/bin/bash
# Check for potential subscription leaks in Angular project
echo "Checking for subscription leaks..."
# Find .subscribe() without takeUntil
echo ""
echo "=== Potential Leaks (subscribe without takeUntil) ==="
grep -rn "\.subscribe(" --include="*.ts" | grep -v "takeUntil" | grep -v "\.spec\.ts" | head -20
# Find missing ngOnDestroy
echo ""
echo "=== Components without ngOnDestroy ==="
for file in $(find . -name "*.component.ts" -type f); do
if grep -q "subscribe(" "$file" && ! grep -q "ngOnDestroy" "$file"; then
echo "$file"
fi
done
echo ""
echo "Scan complete. Review findings above."
#!/usr/bin/env python3
import json
print(json.dumps({"skill": "rxjs"}, indent=2))
Scripts
Automation scripts for rxjs skill.
Related skills
FAQ
What does rxjs-implementation do?
rxjs-implementation is a Claude Code skill for ai & agent building.
When should I use rxjs-implementation?
When you need to helps with ai & agent building tasks., or when rxjs-implementation is a claude code skill for ai & agent building.
What are the main capabilities?
rxjs-implementation; AI & Agent Building; AI-coding skill.