export type EcsFieldType = 'u8' | 'u16' | 'u32' | 'u64' | 'i8' | 'i16' | 'i32' | 'i64' | 'f32' | 'f64' | 'bool' | 'vec2' | 'vec3' | 'bytes';
export type EcsComponentField = {
    name: string;
    type: EcsFieldType;
};
/**
 * Component kind determines storage and synchronization behavior:
 * - static: Configuration that never changes after initial spawn
 * - versioned: Data that changes occasionally (not every tick), auto-increments version on mutation
 * - tick: Data that changes every tick, stored as tick buffer with history
 * - signal: Server-only components that auto-clear each tick, used for intents
 */
export type EcsComponentKind = 'static' | 'versioned' | 'tick' | 'signal';
export type EcsComponentConfig = {
    id: number;
    name: string;
    kind: EcsComponentKind;
    networked: boolean;
    input: boolean;
    fields: EcsComponentField[];
};
export type EcsSystemModule = {
    name: string;
    module: string;
};
export type EcsSystemEntry = string | EcsSystemModule;
export type EcsSystemsConfig = {
    serverStartup?: EcsSystemEntry[];
    serverSimulation: EcsSystemEntry[];
    clientStartup?: EcsSystemEntry[];
    clientSimulation: EcsSystemEntry[];
    clientPresentation: EcsSystemEntry[];
};
export type EcsConfig = {
    components: EcsComponentConfig[];
    systems: EcsSystemsConfig;
};
export declare function validateEcsConfig(config: unknown): EcsConfig;
//# sourceMappingURL=ecs.d.ts.map