Skip to content

Feature Request: Enhanced Search Architecture for Plugin Developers #1

@kunihir0

Description

@kunihir0

Summary

The current get_search_*_list exports (get_search_manga_list, get_search_anime_list, get_search_novel_list) accept a flat query: String and optional filters: [FilterStruct], but there is no standardized way for plugin developers to expose richer search capabilities such as:

  • Tag/genre-based filtering
  • Advanced sort options within search
  • Search suggestions / autocomplete
  • Structured query parameters (author, year, status, etc.)

This limits the Ito app's ability to provide a premium search experience since the app cannot know what search features a given plugin actually supports.

Current API Surface

// ito-rs/src/provider.rs
fn get_search_manga_list(
    query: &str,
    page: i32,
    filters: &[FilterStruct],
) -> Result<MangaPageResult>;
// ito_runner.swift
public func getSearchMangaList(query: String, page: Int32, filters: [FilterItem]?) async throws -> MangaPageResult

Proposed Enhancements

1. Search Capabilities Descriptor

Allow plugins to declare what search features they support via a new export:

fn get_search_capabilities() -> SearchCapabilities;

pub struct SearchCapabilities {
    pub supports_tag_search: bool,
    pub supports_author_search: bool,
    pub supports_sort: bool,
    pub available_sort_options: Vec<SortOption>,
    pub available_genres: Vec<String>,    // e.g. ["Action", "Romance", "Isekai"]
    pub supports_suggestions: bool,
}

This would let the Ito app dynamically render genre chips, sort dropdowns, or author fields only when the active plugin actually supports them.

2. Search Suggestions Export (Optional)

fn get_search_suggestions(query: &str) -> Result<Vec<String>>;

Allows plugins backed by APIs with autocomplete (like AniList, MAL, or Typesense-powered backends like Atsumaru) to provide live suggestions as the user types.

3. Structured Search Parameters

Instead of relying solely on filters: [FilterStruct], consider a dedicated search params struct:

pub struct SearchParams {
    pub query: String,
    pub page: i32,
    pub genres: Vec<String>,
    pub author: Option<String>,
    pub year: Option<i32>,
    pub status: Option<String>,
    pub sort_by: Option<SortOption>,
    pub sort_order: Option<SortOrder>,  // Asc / Desc
}

This gives plugin developers a clean, typed API surface instead of encoding everything into generic filter arrays.

Impact

  • Ito App: Can dynamically render scope controls, genre tags, sort options, and autocomplete based on what plugins declare they support.
  • Plugin Developers: Get a clear, well-documented API to implement richer search without guessing what the host app expects.
  • User Experience: Enables Apple HIG-compliant search with contextual scopes and suggested searches.

Priority

Medium — The current flat query + filters API works for basic search. This enhancement would unlock premium UX features in a future Ito release.

Related Files

  • ito-rs/src/provider.rs — Rust trait definitions
  • ito-runner/Sources/ito-runner/ito_runner.swift — Swift bridge exports

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions