or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

collections-utilities.mdconfiguration.mdcore-serialization.mdcustom-serializers.mdindex.mdmemory-management.mdsecurity.mdtype-system.md

configuration.mddocs/

0

# Configuration

1

2

The configuration system provides comprehensive options for customizing Fury's behavior, performance characteristics, and compatibility features through the FuryBuilder pattern.

3

4

## FuryBuilder

5

6

Primary configuration class for creating and customizing Fury instances.

7

8

```java { .api }

9

public final class FuryBuilder {

10

// Language and compatibility

11

public FuryBuilder withLanguage(Language language);

12

public FuryBuilder withCompatibleMode(CompatibleMode compatibleMode);

13

14

// Security configuration

15

public FuryBuilder requireClassRegistration(boolean requireClassRegistration);

16

public FuryBuilder suppressClassRegistrationWarnings(boolean suppressClassRegistrationWarnings);

17

18

// Performance options

19

public FuryBuilder withCodegen(boolean codeGenEnabled);

20

public FuryBuilder withAsyncCompilation(boolean asyncCompilationEnabled);

21

public FuryBuilder withRefTracking(boolean trackingRef);

22

public FuryBuilder withStringRefIgnored(boolean stringRefIgnored);

23

public FuryBuilder withTimeRefIgnored(boolean timeRefIgnored);

24

public FuryBuilder withBasicTypesRefIgnored(boolean basicTypesRefIgnored);

25

26

// Compression and encoding

27

public FuryBuilder withIntCompressed(boolean compressInt);

28

public FuryBuilder withLongEncoding(LongEncoding longEncoding);

29

public FuryBuilder withStringCompressed(boolean compressString);

30

31

// Advanced options

32

public FuryBuilder withMetaShare(boolean metaShareEnabled);

33

public FuryBuilder withScopedMetaShare(boolean scopedMetaShareEnabled);

34

public FuryBuilder withMetaCompressor(MetaCompressor metaCompressor);

35

public FuryBuilder withClassLoader(ClassLoader classLoader);

36

public FuryBuilder withBufferSizeLimit(int bufferSizeLimitBytes);

37

38

// Serializer configuration

39

public FuryBuilder registerGuavaTypes(boolean registerGuavaTypes);

40

public FuryBuilder withScalaOptimizationEnabled(boolean scalaOptimizationEnabled);

41

public FuryBuilder withDefaultJDKStreamSerializerType(Class<? extends Serializer> defaultJDKStreamSerializerType);

42

43

// Build methods

44

public Fury build();

45

public ThreadSafeFury buildThreadSafeFury();

46

public ThreadLocalFury buildThreadLocalFury();

47

public ThreadPoolFury buildThreadPoolFury();

48

}

49

```

50

51

## Configuration Enums

52

53

### Language

54

55

Defines the serialization language mode for cross-language compatibility.

56

57

```java { .api }

58

public enum Language {

59

JAVA, // Java-specific optimizations (recommended for Java-only usage)

60

XLANG // Cross-language compatibility mode

61

}

62

```

63

64

### CompatibleMode

65

66

Schema compatibility modes for handling schema evolution.

67

68

```java { .api }

69

public enum CompatibleMode {

70

SCHEMA_CONSISTENT, // Schema must be consistent (faster)

71

COMPATIBLE // Support schema evolution (flexible)

72

}

73

```

74

75

### LongEncoding

76

77

Long integer encoding strategies for size optimization.

78

79

```java { .api }

80

public enum LongEncoding {

81

LE_RAW_BYTES, // Little-endian raw bytes (8 bytes)

82

SLI, // Small long integer encoding (variable length)

83

PVL // Positive variable length encoding

84

}

85

```

86

87

## Config Class

88

89

Immutable configuration object containing all Fury settings.

90

91

```java { .api }

92

public class Config implements Serializable {

93

// Configuration properties are accessible via getters

94

public Language getLanguage();

95

public CompatibleMode getCompatibleMode();

96

public boolean isClassRegistrationRequired();

97

public boolean isCodeGenEnabled();

98

public boolean isRefTrackingEnabled();

99

// ... other configuration getters

100

}

101

```

102

103

## Usage Examples

104

105

### Basic Configuration

106

107

```java

108

import org.apache.fury.Fury;

109

import org.apache.fury.config.FuryBuilder;

110

import org.apache.fury.config.Language;

111

112

// Simple Java-only configuration

113

Fury fury = Fury.builder()

114

.withLanguage(Language.JAVA)

115

.requireClassRegistration(false)

116

.build();

117

```

118

119

### High-Performance Configuration

120

121

```java

122

// Optimized for maximum performance

123

Fury fury = Fury.builder()

124

.withLanguage(Language.JAVA) // Java-specific optimizations

125

.withCodegen(true) // Enable JIT compilation

126

.withAsyncCompilation(true) // Async compilation for startup time

127

.withRefTracking(false) // Disable if no circular references

128

.withIntCompressed(true) // Compress integers

129

.withStringCompressed(false) // Skip string compression for speed

130

.requireClassRegistration(true) // Enable for security and performance

131

.build();

132

```

133

134

### Security-Focused Configuration

135

136

```java

137

import org.apache.fury.resolver.AllowListChecker;

138

import java.util.Set;

139

140

// Security-hardened configuration

141

Set<String> allowedClasses = Set.of(

142

"com.myapp.User",

143

"com.myapp.Order",

144

"java.lang.String",

145

"java.util.ArrayList"

146

);

147

148

Fury fury = Fury.builder()

149

.withLanguage(Language.JAVA)

150

.requireClassRegistration(true) // Mandatory class registration

151

.suppressClassRegistrationWarnings(false) // Show warnings

152

.build();

153

154

// Register allowed classes

155

for (String className : allowedClasses) {

156

fury.register(Class.forName(className));

157

}

158

```

159

160

### Cross-Language Configuration

161

162

```java

163

// Configuration for cross-language serialization

164

Fury fury = Fury.builder()

165

.withLanguage(Language.XLANG) // Enable cross-language mode

166

.withCompatibleMode(CompatibleMode.COMPATIBLE) // Schema evolution support

167

.withMetaShare(true) // Share metadata for efficiency

168

.requireClassRegistration(false) // More flexible for XLANG

169

.build();

170

```

171

172

### Thread-Safe Configurations

173

174

```java

175

// ThreadLocal-based thread safety (recommended)

176

ThreadLocalFury threadLocalFury = Fury.builder()

177

.withLanguage(Language.JAVA)

178

.withCodegen(true)

179

.buildThreadLocalFury();

180

181

// Pool-based thread safety

182

ThreadPoolFury threadPoolFury = Fury.builder()

183

.withLanguage(Language.JAVA)

184

.withCodegen(true)

185

.buildThreadPoolFury();

186

```

187

188

### Memory-Optimized Configuration

189

190

```java

191

import org.apache.fury.config.LongEncoding;

192

193

// Optimized for memory usage

194

Fury fury = Fury.builder()

195

.withLanguage(Language.JAVA)

196

.withIntCompressed(true) // Compress integers

197

.withLongEncoding(LongEncoding.SLI) // Small long integer encoding

198

.withStringCompressed(true) // Compress strings

199

.withRefTracking(true) // Share object references

200

.withStringRefIgnored(false) // Track string references

201

.withBufferSizeLimit(64 * 1024) // Limit buffer size

202

.build();

203

```

204

205

### Custom Serializer Configuration

206

207

```java

208

import org.apache.fury.serializer.ObjectStreamSerializer;

209

import org.apache.fury.serializer.JavaSerializer;

210

211

// Custom serializer configuration

212

Fury fury = Fury.builder()

213

.withLanguage(Language.JAVA)

214

.withDefaultJDKStreamSerializerType(ObjectStreamSerializer.class)

215

.registerGuavaTypes(true) // Register Guava collection serializers

216

.withScalaOptimizationEnabled(true) // Enable Scala optimizations

217

.build();

218

```

219

220

### Development vs Production Configurations

221

222

```java

223

public class FuryConfig {

224

public static Fury createDevelopmentInstance() {

225

return Fury.builder()

226

.withLanguage(Language.JAVA)

227

.requireClassRegistration(false) // Flexible for development

228

.suppressClassRegistrationWarnings(true) // Reduce noise

229

.withAsyncCompilation(false) // Synchronous for debugging

230

.build();

231

}

232

233

public static Fury createProductionInstance() {

234

return Fury.builder()

235

.withLanguage(Language.JAVA)

236

.requireClassRegistration(true) // Security

237

.withCodegen(true) // Performance

238

.withAsyncCompilation(true) // Startup optimization

239

.withRefTracking(false) // Performance (if no circular refs)

240

.build();

241

}

242

}

243

```

244

245

## Configuration Best Practices

246

247

### Performance Optimization

248

249

1. **Use Language.JAVA** for Java-only applications

250

2. **Enable code generation** for maximum performance

251

3. **Disable reference tracking** if circular references are not needed

252

4. **Enable class registration** for better performance and security

253

5. **Use async compilation** to improve startup time

254

255

### Security Hardening

256

257

1. **Require class registration** to prevent arbitrary class deserialization

258

2. **Use allow-list based validation** for additional security

259

3. **Avoid disabling class registration warnings** in production

260

4. **Validate input sources** before deserialization

261

262

### Memory Management

263

264

1. **Enable compression** for network/storage scenarios

265

2. **Configure appropriate buffer size limits**

266

3. **Use reference tracking** for object graphs with shared references

267

4. **Consider string reference tracking** for string-heavy data

268

269

### Thread Safety

270

271

1. **Use ThreadLocalFury** for most concurrent scenarios

272

2. **Consider ThreadPoolFury** when ThreadLocal is problematic

273

3. **Share configuration** across thread-safe instances for consistency

274

4. **Avoid sharing single Fury instance** across threads

275

276

## Environment Variables

277

278

Fury respects certain environment variables for global configuration:

279

280

- `ENABLE_CLASS_REGISTRATION_FORCIBLY`: Forces class registration requirement when set to "true" or "1"

281

- Custom class loader configuration through system properties