1 unstable release

new 0.0.2 May 17, 2025

#492 in Database interfaces

MIT license

485KB
2.5K SLoC

Python 1.5K SLoC // 0.2% comments Rust 1K SLoC // 0.1% comments

Rust CI Python Build Python Version Code style: ruff License

Conftier

A powerful multi-tier configuration management framework that simplifies the definition, access, and synchronization of layered configurations in applications.

Think of VSCode's configuration system: you have user settings that apply globally and workspace settings that override them for specific projects. Conftier brings this same intuitive model to your frameworks and applications.

Available Implementations

Conftier is available in multiple languages:

  • Python: Full-featured implementation with Pydantic and dataclass support
  • Rust: High-performance implementation with serde integration (NEW!)

Documentation

For comprehensive guides, examples, and API reference, visit our documentation:

Overview

Conftier helps you manage configurations across multiple levels:

  • User-level settings: Global preferences that apply across all projects (~/.zeeland/{config_name}/config.yaml)
  • Project-level settings: Local configurations specific to a project (./.{config_name}/config.yaml)
  • Default values: Fallback values defined in your configuration schema

Conftier automatically merges these configurations based on priority (project > user > default).

Key Features

  • Multi-level Configuration Management: Like VSCode's user/workspace settings pattern
  • Flexible Schema Definition: Use Pydantic models, dataclasses (Python) or serde structs (Rust)
  • Type Safety: No more string/int confusion or missing required fields
  • Smart Merging: Only override what's specified, preserving other values
  • CLI Integration: Built-in command-line tools for configuration management
  • Cross-language Compatibility: Same configuration model in different languages

Installation

Python

# Basic installation
pip install conftier

# With Pydantic support (recommended)
pip install conftier[pydantic]

Rust

Add this to your Cargo.toml:

[dependencies]
conftier = ">=0.0.2"

Quick Examples

Python Example

from pydantic import BaseModel
from conftier import ConfigManager

class AppConfig(BaseModel):
    app_name: str = "MyApp"
    debug: bool = False

config_manager = ConfigManager(
    config_name="myapp",
    config_schema=AppConfig,
    auto_create=True
)

# Load the merged configuration
config: AppConfig = config_manager.load()

Rust Example

use serde::{Serialize, Deserialize};
use conftier::core::ConfigManager;

#[derive(Serialize, Deserialize, Clone, Default)]
struct AppConfig {
    app_name: String,
    debug: bool,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Initialize config manager
    let mut config_manager = ConfigManager::<AppConfig>::new(
        "myapp", "1.0", true, true
    );
    
    // Load and access configuration
    let config = config_manager.load();
    println!("App name: {}", config.app_name);
    
    Ok(())
}

When to Use Conftier

Conftier shines when:

  1. You're building a framework or library: Give your users a consistent way to configure your tool
  2. Your app has both user and project settings: Like VSCode's personal vs. project-specific settings
  3. You need schema validation: Ensure configuration values have the correct types and valid ranges
  4. You want to reduce boilerplate: Stop writing the same configuration loading code in every project

🛡 License

License

This project is licensed under the terms of the MIT license. See LICENSE for more details.

🤝 Support

For more information, please contact: zeeland4work@gmail.com

Credits 🚀 Your next Python package needs a bleeding-edge project structure.

This project was generated with P3G

Dependencies

~3–11MB
~110K SLoC