Configuration library for JVM languages using HOCON files
npx @tessl/cli install tessl/maven-com-typesafe--config@1.4.0Typesafe Config is a comprehensive configuration management library for JVM applications that provides a thread-safe, immutable API for loading, parsing, and accessing configuration data. It supports HOCON (Human-Optimized Config Object Notation), JSON, and Java Properties formats with advanced features including variable substitution, configuration merging, type conversion, and validation.
<dependency><groupId>com.typesafe</groupId><artifactId>config</artifactId><version>1.4.3</version></dependency>import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValue;
import com.typesafe.config.ConfigObject;import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
// Load default application configuration
Config config = ConfigFactory.load();
// Access configuration values
String dbUrl = config.getString("database.url");
int port = config.getInt("server.port");
boolean enableDebug = config.getBoolean("app.debug");
// Work with nested configuration
Config dbConfig = config.getConfig("database");
String username = dbConfig.getString("username");Typesafe Config is built around several key components:
Primary factory methods for loading configurations from various sources including classpath resources, files, URLs, and in-memory structures.
public static Config load();
public static Config load(String resourceBasename);
public static Config parseString(String hoconString);
public static Config parseFile(File file);
public static Config parseURL(URL url);Core API for accessing configuration values with automatic type conversion and path-based navigation through configuration trees.
public interface Config extends ConfigMergeable {
boolean getBoolean(String path);
int getInt(String path);
long getLong(String path);
double getDouble(String path);
String getString(String path);
Duration getDuration(String path);
ConfigObject getObject(String path);
Config getConfig(String path);
}Value system providing type-safe access to configuration data with support for objects, lists, and primitive types.
public interface ConfigValue extends ConfigMergeable {
ConfigValueType valueType();
Object unwrapped();
String render();
ConfigOrigin origin();
}
public interface ConfigObject extends ConfigValue, Map<String, ConfigValue> {
Config toConfig();
ConfigObject withValue(String key, ConfigValue value);
}Variable substitution system supporting ${path} syntax, environment variables, and custom resolvers for dynamic configuration values.
public Config resolve();
public Config resolve(ConfigResolveOptions options);
public Config resolveWith(Config source);
public boolean isResolved();Comprehensive options system for controlling parsing, resolution, and rendering behavior with support for custom includers and resolvers.
public final class ConfigParseOptions {
public static ConfigParseOptions defaults();
public ConfigParseOptions setSyntax(ConfigSyntax syntax);
public ConfigParseOptions setIncluder(ConfigIncluder includer);
}
public final class ConfigResolveOptions {
public static ConfigResolveOptions defaults();
public ConfigResolveOptions setUseSystemEnvironment(boolean value);
public ConfigResolveOptions appendResolver(ConfigResolver resolver);
}Comprehensive exception hierarchy for handling configuration errors with specific exception types for different error conditions.
public abstract class ConfigException extends RuntimeException {
public static class Missing extends ConfigException { }
public static class WrongType extends ConfigException { }
public static class Parse extends ConfigException { }
public static class UnresolvedSubstitution extends ConfigException { }
}Automatic JavaBean creation from configuration objects with validation and type conversion.
public class ConfigBeanFactory {
public static <T> T create(Config config, Class<T> clazz);
}import java.net.URL;
import java.util.List;
public enum ConfigValueType {
OBJECT, LIST, NUMBER, BOOLEAN, NULL, STRING
}
public enum ConfigSyntax {
JSON, // Strict JSON format
CONF, // HOCON format (default)
PROPERTIES // Java Properties format
}
public interface ConfigOrigin {
String description();
String filename();
URL url();
String resource();
int lineNumber();
List<String> comments();
ConfigOrigin withComments(List<String> comments);
ConfigOrigin withLineNumber(int lineNumber);
}
public final class ConfigMemorySize {
public static ConfigMemorySize ofBytes(long bytes);
public long toBytes();
}
public final class ConfigUtil {
public static String quoteString(String s);
public static String joinPath(String... elements);
public static String joinPath(List<String> elements);
public static List<String> splitPath(String path);
}