Here’s the incomplete documentation for most apps on this site. None of the apps use cookies or so-called “local storage” functionality: thus the only way to remember your data is via permalinks you can bookmark.

app description syntax links extras
Visual SQL use SQLite 3.32 on the go, showing query results using graphics and colors SQL
Table Viewer transform/explore/view tabular data JS
Data Tiles summarize TSV files with colored tiles
Data Inspector inspect CSV/TSV/JSON files with visual/stats summaries
Integer Calculator generate columns of values using increasing number values JS
Query SQL drag/drop TSV files, then query imported tables with SQLite 3.32 into copy/pasteable TSV output SQL
Quick Adder quickly add numbers: numbers can either be explicit or the result of some formula given JS
Quick Calculator quickly calculate with the last 2 numbers given: numbers can either be explicit or the result of some formula given JS
Unit Converter all-in-one unit-converter and calculator JS
Canadian Exchange show recent exchange rates from/to Canadian and US Dollars
Currency Inflator find the value of money by year for Canadian and US Dollars
Heatmapper view a 2-input math function at a glance JS
Function Viewer view 1 or more 1-input (x) math functions JS
3D Grapher view/rotate 1 or more 2-input (x, y) math functions as 3D wireframes JS
World Mapper show colored bubbles from a table with latitude-longitude columns on a map of the world
Minesweeper play Minesweeper with no flags
Memory match pairs of animated characters
Bubbles pop all the bubbles you can by clicking/tapping them
Emojis and Emoticons a document to copy common emojis from
Align 4 2-player game where the first who puts 4 adjacent circles together wins: these 4-streaks can be horizontal, vertical, or diagonal
Multipage Viewer view multiple webpages side-by-side from anywhere
Shady run WebGL fragment shaders on your GPU GLSL
Data Tiles view values from a data table as color-coded tiles
Timezoner view the current time for all the cities you pick/click
Compare Images drop 2 image files onto the page to see them side by side: move the mouse to interactively change how much each image is shown
Song Shuffler play your favorite songs in shuffle mode
Tone Mixer mix multiple sine waves and play them as sounds
Audio Synth hand-code sounds/tunes JS
Read Aloud reads text to you using a speech synthesizer
Document Scratchpad type/paste text and pictures as throwaway notes
Doodle draw with your mouse: right-click for a save-image menu option
Dictionary
  • show dictionary entries for the word given
  • calculates value if given a JavaScript expression
Randomizer pick various kinds of random values at once
Table Converter clean/convert data from/to common tabular-data formats
JSON Inspector view the structure of JSON data, no matter their “shape”
Fake CLI run Linux shell-like commands, including command pipes Shell
Text Editor use a text editor similar to Visual Studio Code
Talk Is Cheap show a random quote
Meme Machine make your own impact-font meme: right-click on the pic when done for a save-image menu option
Calendar Maker choose a year and make a printable 13-page calendar, where the first page is the cover
Compact Calendar see all days in a year: Page Down and Page Up change the year shown; add, say, #2005 (or any other valid year) to end of URL to change default year shown
Canadian Exchage Rates Tracker a multi-year timeline of currency exchange rates relative to the Canadian Dollar

Visual SQL

Run SQL queries using a modern version of SQLite3. While the results view is similar to the Table Viewer’s, this app has no sort-by-column control, since SQL lets you sort right from the query.

On the other hand, this app has a split-by-column control, which the Table Viewer doesn’t: after the full resulting tables, multiple tables split according to distinct values from the column selected will follow it.

The only tabular data format supported is TSV/TXT.

Table Viewer

Similar to Visual SQL, this app differs in 1 significant way: its query language is a line of semicolon-separated JavaScript expressions, instead of SQL.

Assignment-like statements let you rename each column: to allow nice names, the text before the = assignment-operator can have spaces and punctuation, if you want to.

The only tabular data format supported is TSV/TXT.

Integer Calculator

Like the Table Viewer app, the input formulas consists of semicolon-separated JavaScript expressions. In this case, though, the starting values for each row are the variables

As with the Table Viewer, assignment-like statements let you rename each column: to allow nice names, the text before the = assignment-operator can have spaces and punctuation, if you want to.

Quick Adder

A numberpad-friendly app which shows you a running sum:

Quick Calculator

Similar to the Quick Adder app, it uses the last 2 numbers (x, y) you’ve given it to show

It also shows overall stats

Like the Quick Adder app

Unit Converter

Input numbers directly to see many common SI-to-Imperial-type conversions happen at once. The input box also accepts direct JavaScript calculations if you need them.

Heatmapper

View a 2-input (x, y) math function at a glance using the now-popular Viridis quantitative color scale. Black-colored pixels indicate errors/NaN values, making regions outside the formula’s domain easy to see.

As with most of the JavaScript-formula tools on this site, remember that many members of Math are also available directly, which means less typing for you. Also, don’t forget math.js is available too.

Some examples are

Function Viewer

Like other apps multiple semicolon-separated JavaScript expressions are allowed, including naming assignments, which can include spaces and punctuation.

As with most of the JavaScript-formula tools on this site, remember that many members of Math are also available directly, which means less typing for you. Also, don’t forget math.js is available too.

3D Grapher

View/rotate f(x, y) functions as 3D wireframes. Multiple semicolon-separated JavaScript expressions are allowed to let you show multiple such functions at once, even though here the name part in assignment-like expressions is ignored.

As with most of the JavaScript-formula tools on this site, remember that many members of Math are also available directly, which means less typing for you. Also, don’t forget math.js is available too.

World Mapper

Show colored bubbles from a table with latitude-longitude columns on a map of the world. Only TSV/TXT files with a header line are supported.

Latitude and Longitude columns are autodetected by trying to match any of the following potential column names case-insensitively

If a value column is chosen from the control at the top, bubble areas will show with the correct proportions relative to each other.

Multipage Viewer

This app lets you view multiple webpages side-by-side, using any URL you want. You can choose how many rows and columns to use per screenful, then paste your URLs one per line in the textarea. You can then bookmark your permalinks for later viewing. That’s it.

Shady

Run WebGL fragment shaders live: press Ctrl+Enter to update the display. There’s a status bar at the top of the page above the code input box, with success/failure-type feedback showing any syntax errors you may have.

Data Tiles

View all your cells from TSV files as color-coded mini-tiles. Hovering over the values/tiles for each row will show the text-line it’s from, along with its line number.

A basic high-definition screen (1920×1080) gives you enough pixels to see between 645,000 and 1.25 million values at once, depending on how many values per row your table has. A color-coded legend is at the top of the app for reference.

Song Shuffler

Play your favorite songs in shuffle mode

The unusual requirement for full paths in playlists is because browsers don’t share the fullpath from where drag-dropped files come from.

The reason for this app not working directly from any website, is browsers not liking requests to play files from sources with a different protocol than page’s own (i.e. https:// and file:///, which is where your audio files presumably are). I guess a local http(s) webserver serving your audio files should work, but that’s overkill just to play songs.

If you try to use this app directly from the site, you’ll see an error mentioning that security restriction on the browser’s console. Once again, save it as a complete webpage locally, and use that instead.

Tone Mixer

Mix multiple sine waves and play them as sounds: up to a dozen tones are available, each of which is controlled by its own panel, which includes

If you have a multimedia keyboard, you can use the play/pause key instead of the big play button. Last but not least, watch your ears: some sounds may be too loud and/or high-pitched for comfort.

Audio Synth

Play hand-coded sounds/tunes using JavaScript. Your code must export a callback function so the audio system can use it, like so

export function dsp(t, i) {
    return Math.sin(2 * Math.PI * 600)
}

The callback has to return/generate a mono sample each time it’s called

Remember, you need to export the callback and nothing else for things to work.

Read Aloud

Reads text to you using a speech-synthesizer

Randomizer

Pick multiple random values/numbers at once, which includes items from a list: you can drag/drop a text file to have the lines/items typed out for you on the big textarea to the side.

Table Converter

Clean/convert data from/to common tabular-data formats, as shown below

format description convert
from
convert
to
more info
CSV Comma-Separated Values
  • cleaning also converts to TSV
  • comma-separated values supported
  • semicolon-separated values supported
TSV Tab-Separated Values the most space-efficient among the formats supported
JSON JavaScript Object Notation only arrays of flat records/objects are valid input
JSONL JSON Lines only flat records/objects are valid input
SQL Structured Query Language
  • SQLite3-specific result
  • once converted to, all other conversions are disabled
HTML HyperText Markup Language
  • no complete HTML pages are generated
  • once converted to, all other conversions are disabled

JSON Inspector

View the structure of JSON data, no matter their “shape”. Any nesting in the data will show as nested boxes. Note: array indices are shown starting from 0, as expected when dealing with JSON/JavaScript.

Fake CLI

Run Linux shell-like commands, incuding command pipes. Since this is a fake environment, there are no real files nor folders, except for the simulated “bin” folder and its contents: this is mostly to expose the source code for the commands.

On that note, a good example for a piped command is
ls bin | sed '1d; s/(.+)/\/bin\/$1/' | xargs -- cat
which concatenates the sources for all commands available to run.

feature notes
pipes
literal quoting with 's
escapable-quoting with "s
backslash escaping only inside double-quoted arguments
comments useful for memos in the command history, to remind you why you ran some specific command
~ standard error shows only first unrecoverable error
aliases
semicolon-separated sequencing
files and folders only a fake read-only /bin/ folder, so you can see which commands are available using “ls -A bin”
filepath expansion of *s (globs) there are no files/folders to use anyway
stream redirections
here-doc standard input
variables

Commands available, most of them missing minor functionality, include

Canadian Exchage Rates Tracker

A multi-year timeline of currency exchange rates relative to the Canadian Dollar. By default 4 currencies are shown: US Dollar, Mexican Peso, Euro, and UK Pound.

To show other currencies instead, hand-edit the URL adding a # (hash), followed by comma-separated 3-letter currency codes. For example, a URL ending as #usd,try,aud will show the US Dollar, the Turkish Lira, and the Australian Dollar. Currency codes can also be in capital letters if you want.

Data are official from the Bank of Canada with daily updates, except weekends. Below are the currencies its JSON data-feed includes, along with their codes

Australian Dollar AUD Russian Ruble RUB
Brazilian Real BRL Saudi Riyal SAR
Chinese Renminbi CNY Singapore Dollar SGD
European Euro EUR South African Rand ZAR
Hong Kong Dollar HKD South Korean Won KRW
Indian Rupee INR Swedish Krona SEK
Indonesian Rupiah IDR Swiss Franc CHF
Japanese Yen JPY Taiwanese Dollar TWD
Mexican Peso MXN Turkish Lira TRY
New Zealand Dollar NZD UK Pound Sterling GBP
Norwegian Krone NOK US Dollar USD
Peruvian New Sol PEN

math.js

Script module which defines a few handy Math-related JavaScript constants/functions which several apps on this site can then use directly

Math most fields of Math object are made available directly; function log is ln
eu: number Euler’s number (e)
pi: number ratio of circumference over diameter
tau: number double of pi
floor(x: number, dec: number): number floor a number to the number of decimal digits given
floorby(x: number, by: number): number quantized floor function, using the grid-size given
round(x: number, dec: number): number round a number to the number of decimal digits given
sinc(x: number): number the sinc function
reldiff(x: number, y: number): number calculate the relative difference between 2 numbers
scale(x: number,
 dmin: number, dmax: number,
 rmin: number, rmax: number
): number
linearly-translate a number from its continous domain the to the continuous range given
mix(x: number, y: number, k: number): number mix 2 numbers using the mixing factor given
length(x: number[]): number the Euclidean length of a numeric array
dot(x: number[], y: number[]): number calculate the dot-product of 2 numeric arrays
degrees(rad: number): number turn angular radians into angular degrees
radians(deg: number): number turn angular degrees into radians
lcm(x: number, y: number): number the least common-multiple of 2 numbers
gcd(x: number, y: number): number the greatest common-divisor of 2 numbers
logistic(x: number): number the standard logistic function
lgamma(x: number): number the natural-logarithm of the gamma function
lbeta(x: number): number the natural-logarithm of the beta function
gamma(x: number): number the gamma function
beta(x: number): number the beta function
sum(x: number[]): number add all the items in an array
mul(x: number[]): number multiply all the items in an array
summation(a: number, b: number,
 f: (x: number) => number
): number
sum of function results using all integers in [a...b]
product(a: number, b: number,
 f: (x: number) => number
): number
product of function results using all integers in [a...b]
median(x: number[]): number find the median of a numeric array already sorted in increasing order and without nan values
quartiles(x: number[]): number[] get the 5-number summary of a numeric array already sorted in increasing order and without nan values; the returned array items are the
  • 0th quartile (the minimum)
  • 1st quartile
  • 2nd quartile (the median)
  • 3rd quartile
  • 4th quartile (the maximum)
summarize(x: number[], bias: number): {
 min: number,
 max: number,
 n: number,
 sum: number,
 mean: number,
 geomean: number,
 sd: number,
 invalid: number,
}
get various numeric summaries of a numeric array already sorted in increasing order and without nan values; the other input is the bias-correction parameter, where commonly-used values are
  • 0 to calculate the population standard deviation
  • 1 to calculate the sample standard deviation
iota(n: number): number[] make an array of numbers from 1 to the integer number given
sort(x: number[]): number[] sort a numeric array in increasing order
revsort(x: number[]): number[] sort a numeric array in decreasing order
kernels.epa(x: number): number the Epanechnikov kernel function
kernels.tricube(x: number): number the tricube kernel function
kernels.gaussian(x: number): number the gaussian kernel function
pick(x: number[]): number pick a random item from a non-empty array
fix(x: any, decimals: number): string more-permissive alternative to Number.toFixed, since both numbers and strings are allowed
format(x: number, dec: number): string convenient way to format numbers into strings with comma separators and the number of decimals given
parseNumber(s: string): number more-permissive alternative to Number.parseFloat, since it allows a Dollar-sign at the start or after +/-, as well as digit-grouping commas

functions.js

Script module which defines a few handy JavaScript functions which some apps on this site can then use directly

extname(s: string): string get a filepath’s extension without the leading dot
dirname(s: string): string get a filepath’s directory/folder part
basename(s: string): string get a filepath’s filename part, without any folder names
hms2s(time: string): number turn hours:minutes:seconds-type strings (hh:mm:ss) into seconds
s2hms(sec: number): string turn seconds into hours:minutes:seconds-type strings (hh:mm:ss)
mdy2ymd(date: string): string turn month-day-year (mm-dd-yyyy) strings into year-month-day (yyyy-mm-dd) ones
dmy2ymd(date: string): string turn day-month-year (dd-mm-yyyy) strings into year-month-day (yyyy-mm-dd) ones
ymd2n(date: string): number turn year-month-day strings into floating-point years

geography.js

Script module which defines a few handy country/geography-related JavaScript functions which some apps on this site can then use directly

iso2(place: string): string turn country names (or common synonym) into its official 2-letter ISO country code; ISO2 codes are returned as themselves
iso3(place: string): string turn country names (or common synonym) into its official 3-letter ISO country code; ISO3 codes are returned as themselves
country(place: string): string turn a country’s synonyms into the official name; official names are returned as given
continent(place: string): string get a country’s continent; common country-name synonyms are handled automatically
flag(place: string): string get a country’s flag as the URL source for a png picture (example: United States => US.png); common country-name synonyms are handled automatically; when used in Visual SQL and Table Viewer, actual flag pictures (hosted from this site) will show up in cells