🔎 Impossibly fast web search, made for static sites.

Overview

Stork

Impossibly fast web search, made for static sites.

Crates.io Codecov Travis (.com)

Stork is two things. First, it's an indexer: it indexes your loosely-structured content and creates a file that you can upload to your web server. Second, it's a Javascript + WebAssembly frontend for that index file: Stork will hook into an <input> on your web page, download the index you've specified, and display the best search results immediately to your user, as they type. The precomputed index and WebAssembly frontend module make the entire Stork engine very good, and very fast.

Currently in development by James Little

Gif of Stork in Action

Getting Started

Let's put a search box online that searches within the text of the Federalist Papers.

See this demo live at https://stork-search.net.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Federalist Search</title>
  </head>
  <body>
    <div class="stork-wrapper">
      <input data-stork="federalist" class="stork-input" />
      <div data-stork="federalist-output" class="stork-output"></div>
    </div>
    <script src="https://files.stork-search.net/stork.js"></script>
    <script>
      stork.register(
        "federalist",
        "http://files.stork-search.net/federalist.st"
      );
    </script>
  </body>
</html>

Step 1: Include the HTML

Stork hooks into existing HTML that you include on your page. Each Stork instance has to have an input hook and a results list; those two elements should be placed in a wrapper, though the wrapper is optional.

The input hook should have the data-stork="federalist" attribute, where federalist is the name with which you register that search instance. (This way, you can have multiple, independent search boxes on a page, all pointing to different instances.) It doesn't have to be federalist -- you can change it to whatever you want.

The results list should be an empty <div> tag with the attribute data-stork="federalist-results". Again, here, you can change federalist to whatever you want.

The classes in the example above (stork-input, stork-output) are for the theme. Most Stork themes assume the format above; the theme documentation will tell you if it requires something different. You can also design your own theme, at which point the styling and class names are up to you.

Step 2: Include the Javascript

You need to include stork.js, which you can either load from the Stork CDN or host yourself. This will load the Stork WebAssembly blob and create the Stork object, which will allow for registering and configuring indices.

Then, you should register at least one index:

stork.register("federalist", "http://files.stork-search.net/federalist.st");

The search index you build needs to be stored somewhere with a public URL. To register

This registers the index stored at http://files.stork-search.net/federalist.st under the name federalist; the data-stork attributes in the HTML will hook into this name.

Finally, you can set some configuration options for how your search bar will interact with the index and with the page.

Building your own index

You probably don't want to add an interface to your own website that lets you search through the Federalist papers. Here's how to make your search bar yours.

To build an index, you need the Stork executable on your computer. On a Mac, you can run $ brew install jameslittle230/stork-tap/stork to download it. If that doesn't work for you, check out the installation documentation to learn how to build it manually.

The search index is based on a document structure: you give Stork a list of documents on disk and include some metadata about those documents, and Stork will build its search index based on the contents of those documents.

First, you need a configuration file that describes, among other things, that list of files:

[input]
base_directory = "test/federalist"
files = [
    {path = "federalist-1.txt", url = "/federalist-1/", title = "Introduction"},
    {path = "federalist-2.txt", url = "/federalist-2/", title = "Concerning Dangers from Foreign Force and Influence"},
    {path = "federalist-3.txt", url = "/federalist-3/", title = "Concerning Dangers from Foreign Force and Influence 2"},
    {path = "federalist-4.txt", url = "/federalist-4/", title = "Concerning Dangers from Foreign Force and Influence 3"},
    {path = "federalist-5.txt", url = "/federalist-5/", title = "Concerning Dangers from Foreign Force and Influence 4"},
    {path = "federalist-6.txt", url = "/federalist-6/", title = "Concerning Dangers from Dissensions Between the States"},
    {path = "federalist-7.txt", url = "/federalist-7/", title = "Concerning Dangers from Dissensions Between the States 2"},
    {path = "federalist-8.txt", url = "/federalist-8/", title = "The Consequences of Hostilities Between the States"},
    {path = "federalist-9.txt", url = "/federalist-9/", title = "The Union as a Safeguard Against Domestic Faction and Insurrection"},
    {path = "federalist-10.txt", url = "/federalist-10/", title = "The Union as a Safeguard Against Domestic Faction and Insurrection 2"}
]

This TOML file describes the base directory of all your documents, then lists out each document along with the web URL at which that document will be found, along with that document's title.

From there, you can build your search index by running:

$ stork build --input federalist.toml --output federalist.st

This will create a new file at federalist.st. You can search through it with the same command line tool:

$ stork search --index federalist.st --query "liberty" 

To embed a Stork search interface on your website, first upload the index file to your web server, then pass its URL to the stork.register() function in your web page's Javascript.

Going Further

You can read more documentation and learn more about customization at the project's website: https://stork-search.net.

Development

To build Stork, you'll need:

The repository is structured like a typical Cargo package, with some modifications.

  • src holds the Rust source code
  • js holds the Javascript source code
  • test holds files used for development, including test indexes and the static files for the development page.
  • test-assets hold binary assets required by Stork's functional tests.

You can build the project using either the Rust entrypoint or the Javascript entrypoint. After you've built the project, you'll see three more directories:

  • target holds Rust build artifacts
  • pkg holds WASM build artifacts
  • dist holds the final build artifacts and files required for the development server.

If you're interested in extracting the final Stork build artifacts, you can extract the following files after building the project with yarn build:

  • /target/release/stork
  • /dist/stork.js
  • /dist/stork.wasm

Building the Project

Rust

  • cargo build will build the stork executable
  • cargo run will run the executable.

Javascript

  • yarn develop will build an index, build the WASM, and build the Javascript file all in the development configuration. It will then start a development server.
  • yarn build will build all the release assets, including the binary, the WASM, and the Javascript. (Note: This does not work on M1 Macs because of a lack of wasm-pack compatibility.)

You can see more Javascript build options by running yarn run.

Comments
  • Bug in how the title highlighter handles document titles with no spaces

    Bug in how the title highlighter handles document titles with no spaces

    Hi Jamie,

    Sorry for not getting back to your message, at the time I was that distant from this project I had nothing of note to add. However I did decide to give your wee project another shot, since the UI Framework I was seeking to implement this with has became more mature and stable,

    I managed to get Strok installed with little effort, my first cargo package 🥳 I must ask if there is a way for this to get punted into the node_modules/bin/ directory this way it would be as simple to launch using yarn stork ... Im unsure how this would be setup with any CI/CD, using cargo etc im not sure how that jigsaw looks from here,

    The bug I wish to report was with the searching part of the program, it seems to be panicking and not returning any results, in dev tools I have copied the entire stack errors for you, *my apologies,

    I have linked to the repo where this is being ran on, Stork Branch

    Its simple to spin up, the working directory is www/XElement and yarn && yarn start would get you going, if you then do your

    strok test --input src/config/StorkFileIndex.toml
    

    You should see all the jazzy funkyness that is going on, on the localhost:1612

    I appreciate any assistance that you might have towards this, I would love to see this implemented on the fledgling astro-ui project that Ive got going, also would like to see this project work close with other astro projects if we can get a few things sorted out, if you dont mind I would be limited in my contributions since Im not at all proficient in anything really let alone rust 😅, but I am helpful if there is anything I can do to reciprocate in kind,

    Kindest Thanks

    Peter

    type:bug type:support status:in-development 
    opened by aFuzzyBear 10
  • API: allow using a local `.wasm` file

    API: allow using a local `.wasm` file

    Problem: The stork.js generated in releases is hardcoded to use https://files.stork-search.net/releases/v1.5.0/stork.wasm

    Desired behaviour: I'd like stork.js to use a local stork.wasm file. i.e.: https://example.com/stork.js should use https://example.com/stork.wasm automatically.

    Implementation approach: I could pass the wasm URL (/stork.wasm for the above example) explicitly in the register function by having it take it as an argument; register could, in turn, call initialize with that wasm URL, instead of invoking it with empty arguments.

    https://github.com/jameslittle230/stork/blob/8550f1fe13c334f16026d53886d3e17ae0193925/js/main.ts#L40-L45

    as initialize already implements this:

    https://github.com/jameslittle230/stork/blob/8550f1fe13c334f16026d53886d3e17ae0193925/js/main.ts#L14-L15

    Alternative approaches: Or can this desired behavior be achieved in a different way?

    opened by srid 9
  • Odd `<mark>...</mark>` ranges

    Odd `...` ranges

    I'm using the latest stork

    $ stork --version
    Stork 1.4.2
    

    This is an example of the snippet in the search result when the search query is "neovim":

    <p>
            ...to use this you will need the following: <mark class="stork-highlight">neovim</mark> v0.5.0 <mark class="stork-highlight">`neovim/nvim-ls</mark>p` The <mark class="stork-highlight">neovim/nvim-lsp</mark> repository contains language server configurations for a...
            </p>
    

    You can see that when backticks are involved, the mark seems to exclude the last letter of the search result:

    Screen Shot 2022-05-01 at 11 30 22 PM

    The end result is some rather old highlighting. This is what it looks like when I'm not showing the console highlighting:

    Screen Shot 2022-05-01 at 11 30 56 PM

    For reproducing this, you can find a link to the .st file here:

    https://github.com/kdheepak/blog/blob/9e8c45bc90395d05cc610c82f44d6926d4eda7f4/static/assets/stork/search.st

    You can also download it here:

    https://blog.kdheepak.com/assets/stork/search.st

    The code I'm using is all standard, based on the documentation: https://github.com/kdheepak/blog/blob/9e8c45bc90395d05cc610c82f44d6926d4eda7f4/src/lib/components/Search.svelte

    And I'm loading stork from the CDN as shown in the documentation:

    https://github.com/kdheepak/blog/blob/9e8c45bc90395d05cc610c82f44d6926d4eda7f4/src/app.html#L7

    You should be able to see a live version of this bug in action here: https://blog.kdheepak.com/. Scroll to the bottom and you'll be able to find the search bar.

    type:bug 
    opened by kdheepak 7
  • Latest on ubuntu broken (github action runner)? v1.2.1

    Latest on ubuntu broken (github action runner)? v1.2.1

    It seems like the latest version (1.2.1) is broken on the github action ubuntu runner. (Current runner version: '2.278.0')

    Downloaded from here

    Run wget https://files.stork-search.net/releases/latest/stork-ubuntu-latest
    --2021-05-14 18:15:31--  https://files.stork-search.net/releases/latest/stork-ubuntu-latest
    

    fails with:

    Run ./stork-ubuntu-latest --build stork.toml
    ./stork-ubuntu-latest: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
    Error: Process completed with exit code 127.
    

    I just take 1.2.0 for the moment which still works so I guess it is a regression in the latest release.

    Full run: https://github.com/Binaergewitter/serious-bg/runs/2586240245?check_suite_focus=true

    opened by fliiiix 7
  • How to configure Stork to ignore <pre> tags?

    How to configure Stork to ignore
     tags?
    	                                    
    

    My company's documentation has a lot of <pre> tags containing code snippets, and Stork seems to be indexing all of these. Is there a way for me to configure Stork to ignore <pre> and possibly even <code> tags? I tried setting exclude_html_selector = 'pre' and also tried exclude_html_selector = 'pre, code' but neither seem to have an effect.

    I'm guessing this is also why our search index is about 120MB uncompressed, which I'd really like to lower. 😃

    opened by ezekg 6
  • Index small substrings if they seem ideographic

    Index small substrings if they seem ideographic

    The motivation is laid out in #73.

    To recap: Chinese sentences are composed of characters with no whitespace delimination between words. Individual "words" are composed of 1 or more characters. So, in order to produce useful search results for a corpus with Chinese sentences, we'd like to index at a more granular level than clusters of three characters.

    For indexing, the approach implemented by this commit is to examine 1 and 2 length substrings and to index them if they appear to be Chinese. We do this by checking to see if the substring is composed of CJK Ideographic characters (https://en.wikipedia.org/wiki/CJK_Unified_Ideographs), which also covers Japanese and Korean ideographs.

    On the UI side, we run into the issue of searches not being accepted unless there are 3 characters. I lowered the minimum query length to 1. This is because I didn't have any performance issues with small searches after my next PR (incoming.) I'm definitely not sure if you'd like to go with this approach, as it will cause more searches to be triggered that might not be fruitful. Alternatively, we could use the same CJK check on the search input, and only search on small strings if it meets that criteria

    (I'm not personally using the Stork javascript frontend at this point in time, so it's still useful for me without the frontend change, but maybe not useful to others)

    opened by DenialAdams 6
  • Use word length, not query length, to highlight results

    Use word length, not query length, to highlight results

    Fixes #292, hopefully.

    • [x] Changelog entry
    • [x] Test it with the test page and make sure it feels ok to use
    • [x] Test it with @kdheepak's index and make sure it feels ok to use
    opened by jameslittle230 5
  • Panic in fill_containers.rs:115 when indexing URL in markdown content

    Panic in fill_containers.rs:115 when indexing URL in markdown content

    Thanks for resolving #227, I can confirm the fix resolves the issue reported by me yesterday.

    However, I still cannot successfully generate the index: when trying to index another markdown-file, stork is crashing again during index generation:

    Stacktrace:

        Finished dev [unoptimized + debuginfo] target(s) in 0.40s
         Running `target\debug\stork.exe build --input ..\content\stork-config.toml --output stork.st`
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: TryFromIntError(())', stork-index-v3\src\build\fill_containers.rs:115:82
    stack backtrace:
       0:     0x7ff6e985ca9f - std::backtrace_rs::backtrace::dbghelp::trace
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
       1:     0x7ff6e985ca9f - std::backtrace_rs::backtrace::trace_unsynchronized
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
       2:     0x7ff6e985ca9f - std::sys_common::backtrace::_print_fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:67
       3:     0x7ff6e985ca9f - std::sys_common::backtrace::_print::impl$0::fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:46
       4:     0x7ff6e987526a - core::fmt::write
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\fmt\mod.rs:1163
       5:     0x7ff6e9854f78 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\io\mod.rs:1696
       6:     0x7ff6e985f716 - std::sys_common::backtrace::_print
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:49
       7:     0x7ff6e985f716 - std::sys_common::backtrace::print
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:36
       8:     0x7ff6e985f716 - std::panicking::default_hook::closure$1
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:210
       9:     0x7ff6e985f117 - std::panicking::default_hook
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:227
      10:     0x7ff6e985fd75 - std::panicking::rust_panic_with_hook
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:624
      11:     0x7ff6e985f95b - std::panicking::begin_panic_handler::closure$0
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:521
      12:     0x7ff6e985d3c7 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure$0,never$>
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:139
      13:     0x7ff6e985f8b9 - std::panicking::begin_panic_handler
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:517
      14:     0x7ff6e987e440 - core::panicking::panic_fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\panicking.rs:100
      15:     0x7ff6e987e553 - core::result::unwrap_failed
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\result.rs:1616
      16:     0x7ff6e8d1ffc0 - enum$<core::result::Result<u8,core::num::error::TryFromIntError> >::unwrap<u8,core::num::error::TryFromIntError>
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\result.rs:1298
      17:     0x7ff6e8d0a376 - stork_index_v3::build::fill_containers::fill_other_containers_alias_maps_with_prefixes
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\fill_containers.rs:115
      18:     0x7ff6e8d09d10 - stork_index_v3::build::fill_containers::fill_containers
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\fill_containers.rs:47
      19:     0x7ff6e8cc9f79 - stork_index_v3::build::build
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\mod.rs:62
      20:     0x7ff6e8c9c2d9 - stork_lib::build_index
                                   at C:\Users\Andreas\Documents\stork\stork-lib\src\lib.rs:158
      21:     0x7ff6e8c74d8d - stork::build_handler
                                   at C:\Users\Andreas\Documents\stork\stork-cli\src\main.rs:91
      22:     0x7ff6e8c740b2 - stork::main
                                   at C:\Users\Andreas\Documents\stork\stork-cli\src\main.rs:29
      23:     0x7ff6e8c7bc9b - core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:227
      24:     0x7ff6e8c93f1b - std::sys_common::backtrace::__rust_begin_short_backtrace<void (*)(),tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\sys_common\backtrace.rs:123
      25:     0x7ff6e8c76e41 - std::rt::lang_start::closure$0<tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\rt.rs:146
      26:     0x7ff6e985c58b - core::ops::function::impls::impl$2::call_once
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:259
      27:     0x7ff6e985c58b - std::panicking::try::do_call
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:403
      28:     0x7ff6e985c58b - std::panicking::try
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:367
      29:     0x7ff6e985c58b - std::panic::catch_unwind
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panic.rs:133
      30:     0x7ff6e985c58b - std::rt::lang_start_internal::closure$2
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\rt.rs:128
      31:     0x7ff6e985c58b - std::panicking::try::do_call
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:403
      32:     0x7ff6e985c58b - std::panicking::try
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:367
      33:     0x7ff6e985c58b - std::panic::catch_unwind
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panic.rs:133
      34:     0x7ff6e985c58b - std::rt::lang_start_internal
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\rt.rs:128
      35:     0x7ff6e8c76e0f - std::rt::lang_start<tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\rt.rs:145
      36:     0x7ff6e8c76b36 - main
      37:     0x7ff6e987c720 - invoke_main
                                   at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
      38:     0x7ff6e987c720 - __scrt_common_main_seh
                                   at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
      39:     0x7ffee10e7034 - BaseThreadInitThunk
      40:     0x7ffee2242651 - RtlUserThreadStart
    error: process didn't exit successfully: `target\debug\stork.exe build --input ..\content\stork-config.toml --output stork.st` (exit code: 101)
    

    This stripped minimal example shows the offending part of my markdown file. Again, a very long URL (>128 chars) is involved. If I shorten this URL, everything is fine:

    ```go
    ---
    foo
    ```
    
    https://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Official_Presidential_portrait_of_Thomas_Jefferson_%28by_Rembrandt_Peale%2C_1800%29%28cropped%29.jpg/390px-Official_Presidential_portrait_of_Thomas_Jefferson_%28by_Rembrandt_Peale%2C_1800%29%28cropped%29.jpg
    
    ```go
    bla
    ```
    

    My environment:

    • Windows 10 pro x64, Version 21H1 (Build: 19044.1415)
    • cargo 1.57.0 (b2e52d7ca 2021-10-21)
    • npm 8.30
    • wasm-pack 0.10.2
    • HEAD of stork repo
    opened by deining 5
  • Panic in `fill_containers.rs:116` when indexing URL in markdown content

    Panic in `fill_containers.rs:116` when indexing URL in markdown content

    I'm trying to index some markdown-files, and stork is crashing during index generation:

    Stacktrace:

        Finished dev [unoptimized + debuginfo] target(s) in 0.33s
         Running `target\debug\stork-cli.exe build --input ..\content\stork-config.toml --output stork.st`
    thread 'main' panicked at 'attempt to subtract with overflow', stork-index-v3\src\build\fill_containers.rs:116:24
    stack backtrace:
       0:     0x7ff69dec843f - std::backtrace_rs::backtrace::dbghelp::trace
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
       1:     0x7ff69dec843f - std::backtrace_rs::backtrace::trace_unsynchronized
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
       2:     0x7ff69dec843f - std::sys_common::backtrace::_print_fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:67
       3:     0x7ff69dec843f - std::sys_common::backtrace::_print::impl$0::fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:46
       4:     0x7ff69dedf6da - core::fmt::write
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\fmt\mod.rs:1163
       5:     0x7ff69dec4518 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\io\mod.rs:1696
       6:     0x7ff69deca9e6 - std::sys_common::backtrace::_print
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:49
       7:     0x7ff69deca9e6 - std::sys_common::backtrace::print
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:36
       8:     0x7ff69deca9e6 - std::panicking::default_hook::closure$1
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:210
       9:     0x7ff69deca3e7 - std::panicking::default_hook
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:227
      10:     0x7ff69decb045 - std::panicking::rust_panic_with_hook
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:624
      11:     0x7ff69decabff - std::panicking::begin_panic_handler::closure$0
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:519
      12:     0x7ff69dec8d67 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure$0,never$>
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\sys_common\backtrace.rs:139
      13:     0x7ff69decab89 - std::panicking::begin_panic_handler
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:517
      14:     0x7ff69dee7700 - core::panicking::panic_fmt
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\panicking.rs:100
      15:     0x7ff69dee764c - core::panicking::panic
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\core\src\panicking.rs:50
      16:     0x7ff69d7747b5 - stork_index_v3::build::fill_containers::fill_other_containers_alias_maps_with_prefixes
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\fill_containers.rs:116
      17:     0x7ff69d7740f0 - stork_index_v3::build::fill_containers::fill_containers
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\fill_containers.rs:47
      18:     0x7ff69d749909 - stork_index_v3::build::build
                                   at C:\Users\Andreas\Documents\stork\stork-index-v3\src\build\mod.rs:62
      19:     0x7ff69d722109 - stork_lib::build_index
                                   at C:\Users\Andreas\Documents\stork\stork-lib\src\lib.rs:158
      20:     0x7ff69d707a1d - stork_cli::build_handler
                                   at C:\Users\Andreas\Documents\stork\stork-cli\src\main.rs:91
      21:     0x7ff69d706d42 - stork_cli::main
                                   at C:\Users\Andreas\Documents\stork\stork-cli\src\main.rs:29
      22:     0x7ff69d6f199b - core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:227
      23:     0x7ff69d70d10b - std::sys_common::backtrace::__rust_begin_short_backtrace<void (*)(),tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\sys_common\backtrace.rs:123
      24:     0x7ff69d709831 - std::rt::lang_start::closure$0<tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\rt.rs:146
      25:     0x7ff69dec7f2b - core::ops::function::impls::impl$2::call_once
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\core\src\ops\function.rs:259
      26:     0x7ff69dec7f2b - std::panicking::try::do_call
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:403
      27:     0x7ff69dec7f2b - std::panicking::try
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:367
      28:     0x7ff69dec7f2b - std::panic::catch_unwind
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panic.rs:133
      29:     0x7ff69dec7f2b - std::rt::lang_start_internal::closure$2
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\rt.rs:128
      30:     0x7ff69dec7f2b - std::panicking::try::do_call
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:403
      31:     0x7ff69dec7f2b - std::panicking::try
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panicking.rs:367
      32:     0x7ff69dec7f2b - std::panic::catch_unwind
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\panic.rs:133
      33:     0x7ff69dec7f2b - std::rt::lang_start_internal
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\/library\std\src\rt.rs:128
      34:     0x7ff69d7097ff - std::rt::lang_start<tuple$<> >
                                   at /rustc/f1edd0429582dd29cccacaf50fd134b05593bd9c\library\std\src\rt.rs:145
      35:     0x7ff69d7097c6 - main
      36:     0x7ff69dee5bf0 - invoke_main
                                   at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
      37:     0x7ff69dee5bf0 - __scrt_common_main_seh
                                   at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
      38:     0x7ffee10e7034 - BaseThreadInitThunk
      39:     0x7ffee2242651 - RtlUserThreadStart
    error: process didn't exit successfully: `target\debug\stork-cli.exe build --input ..\content\stork-config.toml --output stork.st` (exit code: 101)
    

    My environment:

    • Windows 10 pro x64, Version 21H1 (Build: 19044.1415)
    • cargo 1.57.0 (b2e52d7ca 2021-10-21)
    • npm 8.30
    • wasm-pack 0.10.2
    • HEAD of stork repo
    type:bug type:support status:in-development 
    opened by deining 5
  • Would it be possible to make `@stork/cli` on npm as an alternative installation method?

    Would it be possible to make `@stork/cli` on npm as an alternative installation method?

    I'd really like to work on a workflow for integrating stork with https://github.com/snowpackjs/astro Astro sites, but it'd be best if we didn't have to require people to install rust to use the tool, especially since a JS API for triggering an index build would make integrating it into a post-processing script easier.

    opened by jasikpark 5
  • The format of stork.js is different from the example

    The format of stork.js is different from the example

    Hi,

    I downloaded the project because I wanted to fix the issue when the search crashes on very common word like "and" when you have too many results. I think I have success. It works from command line but I want to test it in my web project before give you the fix because i still don't know how will looks like. There I also have some questions about some limitations that's why I am still not sure that the fix is ok.

    My problem is that I can't build the stork.js file in the same format as https://files.stork-search.net/stork.js Because of the specifics in my project I needed to have stork variable in window.stork which is easy to change in the file above but when I compile the project the stork.js file have different format. Maybe there is something in the packaging that change it? I'll really appreciate if you help me to build that file and hopefully if I manage to make successful fix I can share it.

    Best Regards, Petia

    type:support 
    opened by petia-latinova 5
  • Question: Exclude HTML tags of CSS selectors from being added to the search index

    Question: Exclude HTML tags of CSS selectors from being added to the search index

    Dear Folks,

    Let me take this opportunity to thank the creator and developers working on this project. Stork search is a boon to any static website that needs search functionality.

    I would like to exclude parts of my website from being added to the search index by specifying an HTML tag, HTML tag attribute, or CSS selector as a way of fine-tuning the search.

    I could not find any examples in the documentation. So I was wondering if the feature has been implemented or if there are any workarounds.

    Thanks in advance.

    opened by nandac 2
  • Bump qs from 6.5.2 to 6.5.3

    Bump qs from 6.5.2 to 6.5.3

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump decode-uri-component from 0.2.0 to 0.2.2

    Bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 1
  • Search required 3 chars to return results, but appear to load with 1 and 2

    Search required 3 chars to return results, but appear to load with 1 and 2

    Original issue can be found at https://github.com/MakieOrg/Makie.jl/issues/2004. Below is a copy of the original issue for convenience.

    One and two character searches stay like this: image

    The moment i enter a third char, the result pops up. It should not appear to load when it fact it is waiting for more input.

    opened by KronosTheLate 2
  • Bump loader-utils from 2.0.2 to 2.0.4

    Bump loader-utils from 2.0.2 to 2.0.4

    Bumps loader-utils from 2.0.2 to 2.0.4.

    Release notes

    Sourced from loader-utils's releases.

    v2.0.4

    2.0.4 (2022-11-11)

    Bug Fixes

    v2.0.3

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)
    Changelog

    Sourced from loader-utils's changelog.

    2.0.4 (2022-11-11)

    Bug Fixes

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 1
  • feature_request(output): show all results

    feature_request(output): show all results

    1. Summary

    It would be nice, if would be possible to display all search results by click/tap.

    2. Example of expected behavior

    The user types text in input field of Stork → gets more results than in setting displayed_results_count → now if he clicks to Show all results, all found results will be shown (20 in the example below).

    Show all results

    3. Argumentation

    As a search user, I often want to see all the results found. Unfortunately, for now, perhaps the most important result or the one user need may be hidden because of the limit on the displayed results. It would be nice to see all results without limit.

    3.1. “displayed_results_count” setting performance limitations

    Yes, we have displayed_results_count setting. But it seems that the big value of this setting — as displayed_results_count: 1000 — isn’t a best practice. As written in the documentation, “pushing this too high will result in performance issues”.

    Showing all results for a click/tap is probably the better solution, as it won’t create unnecessary performance issues.

    4. Search for duplicate requests

    1. [x] Look at the required setting in Stork Configuration File Reference
    2. [x] Look at the project roadmap to see where Stork is going, what features are coming down the pipeline, and what Stork author hopes to accomplish
    3. [x] Look at the existing feature issues to make sure the feature you’re requesting hasn't already been requested.

    Thanks.

    opened by Kristinita 0
Releases(v1.5.0)
  • v1.5.0(Jun 1, 2022)

    New Features

    • Adds the Javascript registration option transformResultUrl, which, when set, transforms search result URLs from what's described in the search index to what gets output in the DOM. (Thanks, @ArsenArsen!)
    • Setting output.excerpts_per_result to 0 in your configuration file will now enable index serialization optimizations that can reduce your index filesize by 20-50%. Note that this will make all excerpts disappear from the search UI.

    Bug Fixes

    • Fixes a bug where multiple instances of the element described in the exclude_html_selector configuration option were not being correctly excluded. (Thanks, @ezekg!)
    • Fixes a crash when trying to parse noncompliant Markdown contents (Thanks, @userJY!)
    • Fixes a bug when highlighting search results where highlights wouldn't surround an entire word. (Thanks, @kdheepak!)

    Other

    • Internal dependency updates
    Source code(tar.gz)
    Source code(zip)
    stork-amazon-linux(6.36 MB)
    stork-macos-10-15(10.45 MB)
    stork-ubuntu-20-04(9.97 MB)
    stork.js(22.58 KB)
    stork.js.map(65.99 KB)
    stork.wasm(343.25 KB)
  • v1.4.2(Mar 23, 2022)

    Bug Fixes

    • Fixes a regression where the test server (stork test) was inaccessible
    • Fixes a regression where error messages weren't displayed if no files could successfully be indexed
    • Themes now compensate for border radius when displaying progress bar (Thanks @jmooring!)
    Source code(tar.gz)
    Source code(zip)
    basic.css(4.42 KB)
    dark.css(4.60 KB)
    edible-dark.css(5.12 KB)
    edible.css(4.92 KB)
    federalist.st(1.07 MB)
    flat.css(4.03 KB)
    stork-amazon-linux(6.02 MB)
    stork-macos-10-15(8.94 MB)
    stork-ubuntu-20-04(9.87 MB)
    stork.js(21.36 KB)
    stork.js.map(65.27 KB)
    stork.wasm(348.18 KB)
  • v1.4.1(Mar 13, 2022)

  • v1.4.0(Jan 17, 2022)

    Important Changes

    • Starting with 1.4.0, the JS, CSS, and WASM files at the root of the files.stork-search.net CDN will no longer be updated. From this release going forward, you will need to change your <script> tags and <link rel="stylesheet"> tags to upgrade to a new version of Stork. See this Github announcement for more details.

    New Features

    • Configuration files can now be in JSON format, in addition to TOML format
    • The web library now takes the number of occurrences in each file into account when ordering search results.
    • CLI: The --json flag for the search subcommand is now deprecated, as it did nothing in previous versions of Stork.
    • CLI: A new command line option for the search subcommand, --format <VALUE>, now determines how search results will be displayed in the terminal. The default value is json, which will display the search results in the JSON format understood by the browser module. A new value, pretty, will format the search results in a readable, understandable way. In the 2.0.0 Stork release, pretty will be the default value for this flag.
    • Two new CSS themes, edible and edible-dark, have been added. See https://stork-search.net/themes for examples and instructions on how to integrate them into your project.

    Bug Fixes

    • Removes a stray console.log from the Javascript application
    • Fixes a Javascript runtime bug where registered indexes weren't always reporting as ready
    • Fixes a crash when the indexed contents contained words longer than 128 characters
    • The --timings flag previously did nothing. Now, when included with the build or search subcommands, timing information will be displayed at the end of the terminal output via stderr.
    • Document titles that were comprised of several words separated by hyphens would crash the search interface. This has been fixed.
    Source code(tar.gz)
    Source code(zip)
    basic.css(4.24 KB)
    dark.css(4.42 KB)
    edible-dark.css(5.12 KB)
    edible.css(4.92 KB)
    flat.css(3.85 KB)
    stork-amazon-linux(6.36 MB)
    stork-macos-10-15(9.41 MB)
    stork-ubuntu-20-04(9.95 MB)
    stork.js(21.36 KB)
    stork.js.map(65.27 KB)
    stork.wasm(308.97 KB)
  • v1.3.0(Nov 23, 2021)

    New Features

    • Indexes alt and title attributes on HTML elements
    • Adds configuration keys to set an HTML selector as excluded from indexing
    • Adds a configuration key, output.save_nearest_html_id, that, when set to true, will index the nearest HTML IDs for each word. The web interface will link to that ID; clicking on that search result will jump to the text's location on the page.
    • Reduces JS and WASM artifact sizes by changing build system settings
    • Updates CSS themes, and adds a new theme: flat

    Bug Fixes

    • Fixes a bug where users were able to accidentally download two instances of Stork's WASM on the page (Thanks @justinmayer!)
    • Fixes a bug where the indexer was hanging in environments where stdin was not passed in as an empty stream (Thanks @Aethon!)

    Other

    • Updates dependencies
    Source code(tar.gz)
    Source code(zip)
    stork-amazon-linux(6.98 MB)
    stork-macos-10-15(9.95 MB)
    stork-ubuntu-20-04(10.42 MB)
    stork.js(21.16 KB)
    stork.wasm(346.27 KB)
  • v1.2.1(May 12, 2021)

  • v1.2.0(Apr 22, 2021)

    New Features

    • Stork can now index content from the web. (When the docs are available, a link to the docs will be here!) #146
    • Stork's command line interface has been redesigned and rewritten, with backwards-compatible shims added where needed. #160
      • This change deprecates the filename key in the output configuration.

    Quality of Life Improvements

    • If you index a file and get an empty buffer, Stork will let you know there might be a problem. #147
    • Adds debug method to JS interface #161
    • Improves command line output, especially for errors #160
    • Adds a new break_on_file_error configuration option to stop indexing when first file fails, rather than continuing without the erroring file. #160

    Bug Fixes

    Source code(tar.gz)
    Source code(zip)
    stork-macos-latest(9.26 MB)
    stork-ubuntu-latest(14.09 MB)
    stork.js(104.20 KB)
    stork.wasm(506.36 KB)
  • v1.1.0(Feb 15, 2021)

    New Features

    • Added self-hosting support. Read the self-hosting documentation to learn more.
    • Added Javascript lifecycle methods to give you control over when the WASM downloads, when the index file is downloaded, and when Stork attaches to the DOM. This will greatly improve the Stork experience when using React-based static site generators, such as Next.js or Gatsby. Read the Advanced JS documentation to learn more.
    • New Javascript API method for searching an index without requiring that you use Stork's UI. If you want to build your own Stork UI from scratch, this is the method for you. The Advanced JS documentation link will help you get started with this, too.
    • New Javascript configurations:
      • onResultsHidden - Callback that gets called when the results are hidden, when the user presses esc or clicks on the close button
      • onInputCleared - Callback that gets called when the input is cleared, when the user presses esc twice
      • showCloseButton - Boolean to determine whether the close button is visible or not
    • Stork can now take in a configuration file that's piped into the $ stork --build command, instead of requiring that you pass in a file path.
    Source code(tar.gz)
    Source code(zip)
    stork-macos-latest(5.71 MB)
    stork-ubuntu-latest(7.17 MB)
    stork.js(104.36 KB)
    stork.wasm(475.62 KB)
  • v1.0.4(Jan 10, 2021)

  • v1.0.3(Jan 2, 2021)

    Bug Fixes:

    • Javascript library was erroring incorrectly if the output HTML element could not be found
    • Javascript library was adding stray elements to the DOM while the index was loading

    Enhancements:

    • Hyphens are now treated the same as spaces for indexing and searching purposes. In effect, you can now search for avon and it will match the term Stratford-upon-Avon in your index.
    • Stork used to fail the entire indexing process if there was an error parsing a single file. Now, it will collect those errors and present them in the console, but still build an entire index with the remaining files.

    Note: Javascript bug fixes get applied automatically if you're loading the Stork library from files.stork-search.net.

    Source code(tar.gz)
    Source code(zip)
    stork-macos-latest(5.72 MB)
    stork-ubuntu-latest(7.10 MB)
  • v1.0.2(Dec 29, 2020)

  • v1.0.1(Dec 28, 2020)

    Bug fixes:

    • Some browsers wouldn't display results properly if you started typing before the WASM file had loaded (thanks, @reese!)
    • The indexer wouldn't index words past a certain point if the document contained non-word space-delimited tokens. For example, if your document had the contents hello - world, the word world wouldn't be indexed. (Thanks for reporting, @DanilaFe!)
    • Fix a webpack bug that was only encountered on first install

    Thanks for using Stork!

    Source code(tar.gz)
    Source code(zip)
    stork-macos-latest(5.70 MB)
    stork-ubuntu-latest(7.10 MB)
  • v1.0.0(Dec 13, 2020)

    Stork 1.0.0 is here, with new features, stability improvements, and lots more speed. The major version bump signifies that Stork is officially out of beta, and that I (James, the developer) believe that it can be "production ready" on your site.

    As with any Stork version bump, your Javascript library will automatically update and get you some of the latest changes, and will still work with the index you've already built. To get the full benefit of all the changes in 1.0.0, make sure to update the version of Stork that you're running, then rebuild your index.

    Index Generator Updates:

    • Stork can parse HTML and Markdown input files
    • stork --test command will open a local webserver that lets you test a generated index, without having to build it
    • Sped up index generation (Thanks @DenialAdams!)

    Javascript Library Updates:

    • Separated index parsing from searching in generated WASM library, which sped up searches (Thanks @DenialAdams!)
    • Javascript library adds a "Powered by Stork" UI
    • Adds event handlers to the Javascript configuration so you can define callbacks when your users search for queries and click on results

    Other Improvements:

    • Reworked public interface for those using Stork as a Rust library
    • Added dark.css theme
    • New website documentation
    Source code(tar.gz)
    Source code(zip)
    stork-macos-latest(5.72 MB)
    stork-ubuntu-latest(7.09 MB)
  • v0.7.4(Sep 21, 2020)

  • v0.7.3(Aug 24, 2020)

  • v0.7.2(Jun 19, 2020)

  • v0.7.1(Jun 16, 2020)

    Automatic JS improvements

    • Start using Typescript (this accounts for the ballooning in JS filesize)
    • You can now use the keyboard to interact with the search results! Up and down arrows to navigate, enter to select a result, and esc to hide the list of results
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(May 14, 2020)

    Rebuild your index to get:

    • SRT Subtitle support
    • Customizable stemming language
    • Content in titles is now indexed and prioritized in search results
    • Better error messages if search crashes, which it shouldn't.

    Automatic JS improvements

    • Initial Javascript bundle size much smaller, and search index filesizes are smaller as well. WASM binary is slightly bigger -- I'm trying to find a balance.

    Update the binary for:

    • Improved UX if you provide deprecated configuration fields
    • Improved console output if you run stork --search

    Other Fun

    • New site infrastructure
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Apr 29, 2020)

  • v0.5.3(Mar 28, 2020)

    • Rewrite search algorithm to support multi-word search queries, including sensible result ordering and query highlighting.
    • Tweaks basic.css to give results more room
    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Mar 23, 2020)

  • v0.5.1(Mar 23, 2020)

Owner
James Little
I'm a full-stack developer from Boston with a focus on user experience and interface design. Currently working at @stripe.
James Little
🔍TinySearch is a lightweight, fast, full-text search engine. It is designed for static websites.

tinysearch TinySearch is a lightweight, fast, full-text search engine. It is designed for static websites. TinySearch is written in Rust, and then com

null 2.2k Dec 31, 2022
Shogun search - Learning the principle of search engine. This is the first time I've written Rust.

shogun_search Learning the principle of search engine. This is the first time I've written Rust. A search engine written in Rust. Current Features: Bu

Yuxiang Liu 5 Mar 9, 2022
Lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine

MeiliSearch Website | Roadmap | Blog | LinkedIn | Twitter | Documentation | FAQ ⚡ Lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine ?? M

MeiliSearch 31.6k Dec 31, 2022
🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.

?? Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.

Valerian Saliou 17.4k Jan 2, 2023
⚡ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚡ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 679 Jan 1, 2023
⚡ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚡ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 0 Apr 25, 2022
weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

weggli Introduction weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify int

Google Project Zero 2k Jan 5, 2023
🔎 Search millions of files at lightning-fast speeds to find what you are looking for

?? Search millions of files at lightning-fast speeds to find what you are looking for

Shiv 22 Sep 21, 2022
A simple and lightweight fuzzy search engine that works in memory, searching for similar strings (a pun here).

simsearch A simple and lightweight fuzzy search engine that works in memory, searching for similar strings (a pun here). Documentation Usage Add the f

Andy Lok 116 Dec 10, 2022
High-performance log search engine.

NOTE: This project is under development, please do not depend on it yet as things may break. MinSQL MinSQL is a log search engine designed with simpli

High Performance, Kubernetes Native Object Storage 359 Nov 27, 2022
Perlin: An Efficient and Ergonomic Document Search-Engine

Table of Contents 1. Perlin Perlin Perlin is a free and open-source document search engine library build on top of perlin-core. Since the first releas

CurrySoftware GmbH 70 Dec 9, 2022
Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

Tantivy is a full text search engine library written in Rust. It is closer to Apache Lucene than to Elasticsearch or Apache Solr in the sense it is no

tantivy 7.4k Dec 28, 2022
A full-text search and indexing server written in Rust.

Bayard Bayard is a full-text search and indexing server written in Rust built on top of Tantivy that implements Raft Consensus Algorithm and gRPC. Ach

Bayard Search 1.8k Dec 26, 2022
AI-powered search engine for Rust

txtai: AI-powered search engine for Rust txtai executes machine-learning workflows to transform data and build AI-powered text indices to perform simi

NeuML 69 Jan 2, 2023
A full-text search engine in rust

Toshi A Full-Text Search Engine in Rust Please note that this is far from production ready, also Toshi is still under active development, I'm just slo

Toshi Search 3.8k Jan 7, 2023
Rapidly Search and Hunt through Windows Event Logs

Rapidly Search and Hunt through Windows Event Logs Chainsaw provides a powerful ‘first-response’ capability to quickly identify threats within Windows

F-Secure Countercept 1.8k Dec 31, 2022
Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs

localbang Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs What are "bangs"?? Bangs are a way to define where to search inside

Jakob Kruse 7 Nov 23, 2022
🔎 A simple in-memory search for collections and key-value stores.

Indicium Search ?? A simple in-memory search for collections (Vec, HashMap, BTreeMap, etc) and key-value stores. Features autocompletion. There are ma

Dylan Bowker 41 Oct 28, 2022
A Rust API search engine

Roogle Roogle is a Rust API search engine, which allows you to search functions by names and type signatures. Progress Available Queries Function quer

Roogle 342 Dec 26, 2022