URL & local first client side actions for the browser omnibox
Find (I4kFind
) is a privacy friendly, client side, local/URL first
toolkit, to customize a web browser's URL Omnibox (the search/address
bar).
There are more examples of usages, and development notes in the ./docs folder.
Remember, this is an experimental project, please make regular backups of your custom syntax, and "pin a package version that works" if you are running a custom instance. For full privacy, run a personal instance.
It does not need to be installed as a browser extension or addon, though the UX feels more fluid when used as "default search engine" (can be self hosted, but does not need to in order to be customized).
It does not make any search request itself, "just builds URLs" of specialized websites, to which is passed the user's "search query" (it could also be the value of URL parameters of any destination application).
On internet4000.github.io/find
it is possible to make queries to Find, such as !docs usage
which
will redirect the browser page, to this document (to the link with
#usage
).
How it could be used:
!m
), contacts (!c
), wikipedia (!w
) new spreadhseet
(+sheet
), matrix link &mx @user:domain.tld
, create a WebRTCPeer
data channel to &rtcmx @user:domain.tld
) etc. It is all built on
open standard web technologies!
engine"; ex: !def find
(will will
delegate the to DDG, which knows what to do with !def
)!ex
→ https://example.org
https://example.org/my-app/{}/?query={}
(no support for named
placeholders yet)data:text/html,<h1>Hello world</h1>
), to copy/share/edit/store temporary data, in various
formatsgit clone
, npm i && npm run serve
, open https://localhost?q=%s
, should be
discoverable as browser "open search engine"; and could use a
different "suggestion API"; or under VPN, such as a Tailscale
tailnet, for all devices to share)window.location/api/suggestions/
))<protocol><:><//><ressource>
, to support a fallback when user
requests gopher://gopher.floodgap.com
,
gemini://kennedy.gemi.dev
, finger://
, text://
etc.+issue
or +chat
)For additional usages see the documentation folder.
Find is opened by the browser, as a search engine, with the query
typed by the user in their web-browser's URL bar (or from a query
inside a <i4k-find-search/>
web-component, or a call to
Find.find("my query")
etc.).
From the query, it will try to look for "the pattern it knows", to see it the user typed a Find query, if there are none, it will default to seaching, like a usual web-search, to the user's default search engine (to be defined by the user)
For community chat and support, see the #i4k-find:matrix.org room, or the git issues, as you see fit. Feedback, bug reports, engine/symbol/feature requests, suggestions welcome.
For new URL patterns, syntax and engine suggestions >i4kfpm <queyr>
for searching github repo with topics:
"i4k-find+package
It is possible to use Find with
In general, the UX should feel nicer when any instance is defined as the default web browser's search engine. Otherwise it is also possible to use a browser search engine keyword (still need to install a Find instance as a search engine in the browser, but no need to defined as the default one, as long as it has a keyword, which has to be prefixed to every find query).
./index.html
file for how to import the package and the GUI.assets/opensearch.xml
file for the new instance URL and informationIt should be also available through a CDN: !cdn i4k-find to import.
The URL bar of web-browsers is used to write text, websites adresses and search queries. Find is a tool that offers a user the possibility to customize the functionalities of any (device) web-browser's URL Address Bar (aka the omnibox).
It is similar (and a lighweight, self-hostable, customizable, free software alternatieve) to DuckDuckGo bangs, and runs only in the user browser.
The code is javascript running client side, and can be customized with new search engines, synchronised across devices using the native browser's password manager (treating the user search engines custom configuration as a passwrod for the instance of find you're using).
It aims to be a lightweight way to enhance the URL bar, the URI building user-experience, accesible to use and install on personal instance(s).
It is Free software that can be customized and hosted quickly at your convenience.
The fastest way to try its features, is by testing it with the example queries on this page: try Find! here.
If you want to have the best experience, try it as your web browser's
default search engine; so all the features are accesible directly in
your URL bar (tip: focus the omnibox with the keyboard shortcut
Control + l
, the keys Control
and the lowercase letter L
, aka
C-l
).
By default, a Find search query, goes to the default search engine
(!d
) in our case, duckduckgo, and it is
possible to re-assign the "default search engine's value".
Here are example usage of user queries, one can type in an input
supporting Find queries (such as the one on the
homepage). A Find search input
will try to suggest the available symbols (!&+#
) and their
associated engines.
In the examples, lines prefixed with
;;
are comments, with;;→
outputs URL or Find queries.
Example search
with !
symbol:
;; "default search", without anything "Find related"
Hello world
;;→ https://duckduckgo.com/?q=hello+world
;; A "map" search, defaults to google map (can be re-assigned to open street map etc.)
!m egypt
;;→ https://www.google.com/maps/search/egypt
Example build
with &
symbol:
;; go to, or buid a github profile/actor url
&gh
;;→ https://github.com
&gh internet4000
;;→ https://github.com/internet4000
&gh internet4000 find
... and more (all customizable)
;; to build a "matrix link to room/user" URL
&mx #i4k-find:matrix.org
;;→ https://matrix.to/#/%23i4k-find%3Amatrix.org
Example do
with +
symbol:
Type any of these in a Find search input, or in your browser URL bar (if Find is one of your browser search engine).
;; create a new google spreadsheet (with a title)
+sheet my new sheet
;; draw a new "google draw"
+draw hello world
;; take a note
+note My note content
;; create temporary "URL space" with text/|data
+space my data
;; create a "data json url" value
;; can be copied again to a new URL, stored as bookmark etc.
+data-json {"my-json": true}
Example command
with the #
symbol prefix (functions cannot
currently be user defined, only the other exisiting symbols):
;; to "save" an engine as a new "user defined engine" (userEngines)
#add ! ex https://example.org/
;;→ will save this URL, can be called as !ex
;; to add a new engine, with URL placeholders
#add ! ex https://example.org/blog/{}
;;→ will save this URL, can be called as !ex <blog-article-id>
;; to add a new "buid" engine, with URL placeholders
#add & ghi https://github.com/internet4000/{}
;;→ will save this URL, can be called as &ghi find (to reach the project)
Some reasons why this project exists:
.bash_history
etc.)+wr
and +wri
for serendipity,
placeholders)Some reasons why DuckDuckGo is the default search engine:
!
bangs (13,563+
bangs! search engines)Cons for DDG:
The code of this software uses the GNU General Public License
v3, which makes it Free
software (see
/license.txt
).