managing-hive-storage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited managing-hive-storage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Implement high-performance NoSQL object storage using Hive CE (Community Edition). Hive offers blazing-fast synchronous operations, custom type adapters, and lazy loading for efficient local data persistence.
dependencies:
hive_ce: ^2.19.3
hive_ce_flutter: ^2.3.4
dev_dependencies:
hive_ce_generator: ^1.11.1
build_runner: ^2.14.1import 'package:hive_ce_flutter/hive_ce_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
// Register adapters
Hive.registerAdapter(UserAdapter());
Hive.registerAdapter(TodoAdapter());
// Open boxes
await Hive.openBox<User>('users');
await Hive.openBox<Todo>('todos');
runApp(MyApp());
}Using Code Generation (Recommended):
import 'package:hive_ce/hive.dart';
part 'user.g.dart';
@HiveType(typeId: 0)
class User extends HiveObject {
@HiveField(0)
final String id;
@HiveField(1)
final String name;
@HiveField(2)
final String email;
@HiveField(3)
final DateTime createdAt;
User({
required this.id,
required this.name,
required this.email,
required this.createdAt,
});
}
// Generate adapter: flutter pub run build_runner buildManual TypeAdapter:
class UserAdapter extends TypeAdapter<User> {
@override
final int typeId = 0;
@override
User read(BinaryReader reader) {
return User(
id: reader.readString(),
name: reader.readString(),
email: reader.readString(),
createdAt: DateTime.fromMillisecondsSinceEpoch(reader.readInt()),
);
}
@override
void write(BinaryWriter writer, User obj) {
writer.writeString(obj.id);
writer.writeString(obj.name);
writer.writeString(obj.email);
writer.writeInt(obj.createdAt.millisecondsSinceEpoch);
}
}Create/Update:
final box = Hive.box<User>('users');
// Add with auto-key
await box.add(User(id: '1', name: 'John', email: '[email protected]', createdAt: DateTime.now()));
// Put with custom key
await box.put('user_1', user);
// Update (if model extends HiveObject)
user.name = 'Jane';
await user.save();Read:
// Get by key
final user = box.get('user_1');
// Get all values
final allUsers = box.values.toList();
// Filter
final activeUsers = box.values.where((u) => u.isActive).toList();
// Get at index
final firstUser = box.getAt(0);Delete:
// Delete by key
await box.delete('user_1');
// Delete at index
await box.deleteAt(0);
// Delete if model extends HiveObject
await user.delete();
// Clear all
await box.clear();Lazy Boxes (for large data):
// Open lazy box (loads data on demand)
final lazyBox = await Hive.openLazyBox<User>('users_lazy');
// Async get (only loads when accessed)
final user = await lazyBox.get('user_1');Encrypted Boxes:
import 'package:hive_ce/hive.dart';
import 'dart:convert';
import 'dart:typed_data';
final key = Hive.generateSecureKey(); // Store this securely!
final encryptedBox = await Hive.openBox<User>(
'secure_users',
encryptionCipher: HiveAesCipher(key),
);Reactive Listening:
// Listen to box changes
box.watch().listen((event) {
print('Box changed: ${event.key}');
if (event.deleted) {
print('Item deleted');
} else {
print('Item added/updated: ${event.value}');
}
});
// Listen to specific key
box.watch(key: 'user_1').listen((event) {
print('User 1 updated: ${event.value}');
});Compaction (reduce file size):
// Compact box to reclaim space
await box.compact();
// Auto-compact on close
await box.close();With Riverpod:
final userBoxProvider = Provider<Box<User>>((ref) {
return Hive.box<User>('users');
});
final usersProvider = StreamProvider<List<User>>((ref) {
final box = ref.watch(userBoxProvider);
return box.watch().map((_) => box.values.toList());
});
// Usage in widget
final users = ref.watch(usersProvider);
users.when(
data: (list) => ListView(children: list.map((u) => UserTile(u)).toList()),
loading: () => CircularProgressIndicator(),
error: (e, _) => Text('Error: $e'),
);~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.