<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>INFINI Framework on INFINI Framework | The Best Open Source Golang Framework for Easysearch/Elasticsearch/OpenSearch</title><link>https://docs.infinilabs.com/framework/v1.4.1/</link><description>Recent content in INFINI Framework on INFINI Framework | The Best Open Source Golang Framework for Easysearch/Elasticsearch/OpenSearch</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Thu, 22 Aug 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://docs.infinilabs.com/framework/v1.4.1/index.xml" rel="self" type="application/rss+xml"/><item><title>Configuration Management</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/config/</guid><description>Configuration Management # The INFINI Framework provides a comprehensive configuration management system built on top of ucfg. It supports YAML-based configuration files, struct unpacking with config tags, environment variable interpolation, keystore secret references, config file watching, and multi-file config merging. Modules and plugins use a consistent pattern to declare, load, and apply their configuration.
Overview # Configuration in the INFINI Framework follows a layered approach:
Application config file (e.</description></item><item><title>API Specification</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/development/api/specification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/development/api/specification/</guid><description>API Specification # This document defines the conventions and standards for building APIs with the INFINI Framework. Following these specifications ensures consistent, predictable, and maintainable API endpoints across all applications built on the framework.
Handler Structure # Every API handler must embed the base api.Handler struct to gain access to all built-in request and response helpers.
package mymodule import ( &amp;#34;infini.sh/framework/core/api&amp;#34; httprouter &amp;#34;infini.sh/framework/core/api/router&amp;#34; &amp;#34;net/http&amp;#34; ) type APIHandler struct { api.</description></item><item><title>Module System</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/modules/</guid><description>Module System # The INFINI Framework uses a modular architecture where functionality is organized into self-contained modules. Each module follows a standard lifecycle and can be registered, configured, enabled, or disabled independently. The module system manages startup ordering through priorities and provides a clean separation between core system modules and user-provided plugins.
Module Interface # Every module must implement the Module interface defined in core/module/interface.go:
type Module interface { Setup() Start() error Stop() error Name() string } Methods # Method Description Name() string Returns a unique identifier for the module, used in configuration and logging.</description></item><item><title>Setting Up the Golang Environment</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/development/setup_golang_environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/development/setup_golang_environment/</guid><description>Setting Up the Golang Environment # Refer the official guide to install Golang: https://go.dev/doc/install
Golang Version # Verify your Go version:
➜ loadgen git:(master) ✗ go version go version go1.23.3 darwin/arm64 Directory Setup # Create the necessary directory structure:
cd ~/go/src/ mkdir -p infini.sh/ Note: The code must be located under your personal directory at ~/go/src/infini.sh.
Other locations are not allowed—this is a strict requirement.
Cloning Dependencies # Clone the required dependency repositories:</description></item><item><title>Pipeline and Processor</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/pipeline/</guid><description>Pipeline and Processor # The INFINI Framework includes a pipeline engine for building data processing workflows. A pipeline is an ordered list of processors that execute sequentially against a shared context. Each processor performs a single unit of work — transforming data, calling external services, routing messages, or applying business logic. Pipelines are configured in YAML and can include conditional branching, error handling, and automatic restart behavior.
Processor Interface # Every processor must implement the Processor interface defined in core/pipeline/processor.</description></item><item><title>Queue</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/queue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/queue/</guid><description>Queue # The INFINI Framework provides a pluggable queue abstraction for asynchronous message passing between components. Queues decouple producers from consumers, enabling reliable data pipelines, buffering, and background processing. The framework ships with multiple backend implementations — disk-based persistence, in-memory queues, Kafka, and Redis — all accessed through a unified API.
Queue Interfaces # The queue system defines three levels of capability through separate interfaces in core/queue/.
QueueAPI # QueueAPI is the base interface that every queue backend must implement.</description></item><item><title>Setup IntelliJ IDEA</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/development/setup_intellij_idea/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/development/setup_intellij_idea/</guid><description>Setup IntelliJ IDEA # This guide provides step-by-step instructions to configure IntelliJ IDEA for Go development, ensuring optimal compatibility with project requirements.
Configure GOPATH # Set the GOPATH for your project in IntelliJ IDEA:
Navigate to: Preferences | Languages &amp;amp; Frameworks | Go | GOPATH
Adjust Run/Debug Configurations # For projects that rely on legacy dependency management (e.g., the vendor folder), configure the necessary environment variables:</description></item><item><title>Task Scheduling</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/task/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/task/</guid><description>Task Scheduling # The INFINI Framework provides a built-in task scheduling system for running recurring, cron-based, and one-off background tasks. Tasks are managed through a central registry that handles scheduling, lifecycle tracking, and graceful shutdown. The task system is defined in core/task/task.go.
Overview # The task system supports three types of tasks:
Type Description interval Executes repeatedly at a fixed time interval (e.</description></item><item><title>Create New Application</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/development/create_new_application/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/development/create_new_application/</guid><description>Create New Application # Let&amp;rsquo;s use the NewAPP as the new project for example.
Create the project folder # Use the name new_app as the project id, and create the project folder as below:
cd ~/go/src/infini.sh/ mkdir new_app Note: Ensure that new_app is located in the same directory as the framework folder. This structure is required for the Makefile to function correctly.
Create the main file # Create a empty main.</description></item><item><title>Makefile</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/makefile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/makefile/</guid><description>Makefile # The framework simplifies managing your application by providing reusable commands and variables. Below is an example of how Loadgen utilizes this framework in its Makefile:
Use Loadgen for example, here is the project&amp;rsquo;s Makefile looks like:
➜ loadgen git:(main) cat Makefile SHELL=/bin/bash # APP info APP_NAME := loadgen APP_VERSION := 1.0.0_SNAPSHOT APP_CONFIG := $(APP_NAME).yml $(APP_NAME).dsl APP_EOLDate ?= &amp;#34;2025-12-31T10:10:10Z&amp;#34; APP_STATIC_FOLDER := .public APP_STATIC_PACKAGE := public APP_UI_FOLDER := ui APP_PLUGIN_FOLDER := proxy include .</description></item><item><title>Key-Value Store</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/kv/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/kv/</guid><description>Key-Value Store # The INFINI Framework provides a pluggable key-value store abstraction for persisting arbitrary binary data organized by buckets. The KV store decouples application logic from the underlying storage engine, allowing you to swap backends — BadgerDB, Elasticsearch, or a simple file-based store — without changing your application code. All backends are accessed through a unified API with built-in compression support.
KVStore Interface # Every KV backend must implement the KVStore interface defined in core/kv/.</description></item><item><title>Statistics Collection</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/stats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/stats/</guid><description>Statistics Collection # The INFINI Framework provides a pluggable statistics collection system for recording, querying, and exporting application metrics. The core/stats package defines a common interface and package-level convenience functions, while backends such as the built-in SimpleStatsModule and the optional StatsD plugin handle storage and forwarding.
Architecture # The stats system follows a handler-based design:
Core interface (core/stats) — defines the StatsInterface contract and exposes package-level functions that delegate to every registered backend.</description></item><item><title>Conditions</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/conditions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/conditions/</guid><description>Conditions # The INFINI Framework provides a powerful conditions system for evaluating events against configurable rules. Conditions are used throughout the framework — most notably in pipeline if/then/else branching — to make runtime decisions based on field values, patterns, numeric ranges, network membership, and logical combinations.
The conditions package is located at core/conditions/.
Condition Interface # Every condition implements the Condition interface:
type Condition interface { Check(event ValuesMap) bool String() string } Method Description Check(event ValuesMap) bool Evaluates the condition against an event.</description></item><item><title>API &amp; Web Framework</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/api_web/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/api_web/</guid><description>API &amp;amp; Web Framework # The INFINI Framework provides a comprehensive API and Web framework built on top of Go&amp;rsquo;s HTTP ecosystem, featuring high-performance routing, flexible middleware system, and built-in security features.
Overview # The framework offers two separate but complementary HTTP servers:
API Server: Designed for programmatic access and RESTful APIs Web Server: Designed for web interfaces and UI applications Both servers share common patterns and can be configured independently.</description></item><item><title>ORM (Object-Relational Mapping)</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/orm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/orm/</guid><description>Object-Relational Mapping # The INFINI Framework provides a powerful ORM system built on top of Elasticsearch(Including OpenSearch,Easysearch support), enabling developers to define, store, and query structured data objects with ease. The ORM handles object mapping, indexing, and provides a comprehensive set of CRUD operations.
Object Definition # Objects in the ORM are defined by embedding orm.ORMObjectBase in your struct, which automatically provides all required ORM functionality including system fields for metadata management.</description></item><item><title>Http Client Configuration</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/http_client/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/http_client/</guid><description>HTTP Client Configuration # The http_client section defines configurations for HTTP clients, where each key represents a unique client profile. The default key is a special profile that serves as the fallback configuration when no specific profile is specified. Additional profiles can be added and accessed dynamically.
Sample Configuration # http_client: default: proxy: enabled: true default_config: http_proxy: http://127.0.0.1:7890 socket5_proxy: socks5://127.0.0.1:7890 override_system_proxy_env: true # Override system proxy environment settings permitted: - &amp;#34;google.</description></item><item><title>Keystore</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/keystore/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/keystore/</guid><description>Keystore # The INFINI Framework provides a secure keystore for managing sensitive configuration values such as passwords, API keys, certificates, and other secrets. Secrets are stored in an AES-256 encrypted file on disk and can be referenced in configuration files using variable substitution.
Overview # The keystore offers three ways to manage secrets:
CLI Commands: Add, list, and remove secrets from the command line. Configuration Reference: Use $[[keystore.</description></item><item><title>Query URL Parameters</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/query_url/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/query_url/</guid><description>Query URL Parameters # The query URL parameters can be used in many places (e.g., HTTP API endpoints, internal service calls, debug consoles). We use them to unify how queries are received and processed across different components of the system. This provides a powerful, composable, and human-readable way to construct both full-text search and structured filters, while also supporting advanced features like fuzziness, field selection, and pagination.
🔧 Query URL Parameters # These URL parameters are used to construct a rich and dynamic search query.</description></item><item><title>Aggregation via URL Parameters</title><link>https://docs.infinilabs.com/framework/v1.4.1/docs/references/aggs_query/</link><pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate><guid>https://docs.infinilabs.com/framework/v1.4.1/docs/references/aggs_query/</guid><description>Aggregation via URL Parameters # The INFINI Framework allows for the dynamic construction of complex aggregations directly through URL query parameters. This provides a powerful and flexible way to perform data analysis without needing to construct a full JSON request body.
Basic Structure # The basic syntax for defining an aggregation is as follows:
agg[&amp;lt;aggregation_name&amp;gt;][&amp;lt;aggregation_type&amp;gt;][&amp;lt;parameter&amp;gt;]=&amp;lt;value&amp;gt; &amp;lt;aggregation_name&amp;gt;: A user-defined name for the aggregation (e.g., products_by_brand). This name will be the key for the aggregation results.</description></item></channel></rss>