duckdb-wasm
calculang
duckdb-wasm | calculang | |
---|---|---|
11 | 5 | |
924 | 39 | |
5.2% | - | |
9.5 | 4.6 | |
3 days ago | 5 months ago | |
C++ | JavaScript | |
MIT License | GNU Affero General Public License v3.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
duckdb-wasm
-
Parquet-WASM: Rust-based WebAssembly bindings to read and write Parquet data
i think duckdb-wasm is closer to 6MB over wire, but ~36MB once decompressed. (see net panel when loading https://shell.duckdb.org/)
the decompressed size should be okay since it's not the same as parsing and JITing 36MB of JS.
- 42.parquet ā A Zip Bomb for the Big Data Age
-
Show HN: Open-source, browser-local data exploration using DuckDB-WASM and PRQL
Hey HN! Weāve built Pretzel, an open-source data exploration and visualization tool that runs fully in the browser and can handle large files (200 MB CSV on my 8gb MacBook air is snappy). Itās also reactive - so if, for example, you change a filter, all the data transform blocks after it re-evaluate automatically. You can try it here: https://pretzelai.github.io/ (static hosted webpage) or see a demo video here: https://www.youtube.com/watch?v=73wNEun_L7w
You can play with the demo CSV thatās pre-loaded (GitHub data of text-editor adjacent projects) or upload your own CSV/XLSX file. The tool runs fully in-browserāyou can disconnect from the internet once the website loadsāso feel free to use sensitive data if you like.
Hereās how it works: You upload a CSV file and then, explore your data as a series of successive data transforms and plots. For example, you might: (1) Remove some columns; (2) Apply some filters (remove nulls, remove outliers, restrict time range etc); (3) Do a pivot (i.e, a group-by but fancier); (4) Plot a chart; (5) Download the chart and the the transformed data. See screenshot: https://imgur.com/a/qO4yURI
In the UI, each transform step appears as a āBlockā. You can always see the result of the full transform in a table on the right. The transform blocks are editable - for instance in the example above, you can go to step 2, change some filters and the reactivity will take care of re-computing all the cells that follow, including the charts.
We wanted Pretzel to run locally in the browser and be extremely performant on large files. So, we parse CSVs with the fastest CSV parser (uDSV: https://github.com/leeoniya/uDSV) and use DuckDB-Wasm (https://github.com/duckdb/duckdb-wasm) to do all the heavy lifting of processing the data. We also wanted to allow for chained data transformations where each new block operates on the result of the previous block. For this, weāre using PRQL (https://prql-lang.org/) since it maps 1-1 with chained data transform blocks - each block maps to a chunk of PRQL which when combined, describes the full data transform chain. (PRQL doesnāt support DuckDBās Pivot statement though so we had to make some CTE based hacks).
Thereās also an AI block: This is the only (optional) feature that requires an internet connection but weāre working on adding local model support via Ollama. For now, you can use your own OpenAI API key or use an AI server we provide (GPT4 proxy; itās loaded with a few credits), specify a transform in plain english and get back the SQL for the transform which you can edit.
Our roadmap includes allowing API calls to create new columns; support for an SQL block with nice autocomplete features, and a Python block (using Pyodide to run Python in the browser) on the results of the data transforms, much like a jupyter notebook.
Thereās two of us and weāve only spent about a week coding this and fixing major bugs so there are still some bugs to iron out. Weād love for you to try this and to get your feedback!
- DuckDB-WASM: WebAssembly Version of DuckDB
-
Show HN: DuckDB-WASM, execute queries in a browser, and share them as links
Amazing, I was eagerly waiting for this one. Loading extensions in previous DuckDB-WASM releases didn't work seamlessly. Looks like now it's the case :D
ref: https://github.com/duckdb/duckdb-wasm/issues/1542#issuecomme...
Thanks!!
-
DuckDB 0.9.0
Btw, it's already happening:
Go to https://shell.duckdb.org, and type
-
Does anyone else hate Pandas?
I like Pandas, but you will love duckdb, which is solving this exact problem: https://duckdb.org/; https://shell.duckdb.org/
-
[Question] Using DuckDB to connect to (external/cloud) Postgres DB
There's also https://shell.duckdb.org/ for playing around.
- Ask HN: What tech is under the radar with all attention on ChatGPT etc.
-
My first Rust project: Xlsx-wasm-parser. A WebAssembly-wrapper around the Calamine crate to bring Blazingly Fast Excel deserialization to the Browser and NodeJS.
I know xls != csv, but would be cool to compare against https://github.com/duckdb/duckdb-wasm as well
calculang
- Show HN: Open-source, browser-local data exploration using DuckDB-WASM and PRQL
-
Dynamic programming in Haskell: automatic memoization
I develop calculang, a language for calculations. It converts concise formulae into Javascript.
Since calculation formulae are usually inherently pure, a `--memo` flag to the compiler memoizes the lot.
Many of my models are written in this recursive style and only work because of memoization. Sometimes other tricks are needed e.g. careful ordering of the calls, so that the memo is available before the stack breaks.
My first calculang example is a bouncing ball: the position at t depends speed and the position at t-1. With loops we'll usually discover the same thing, but it's so much harder to follow.
First-class memoization to proliferate this style is a really neat thing.
[0] https://github.com/calculang/calculang
[1] bouncing ball code: https://github.com/declann/calculang-miscellaneous-models/bl...
[2] bouncing ball initial post: https://observablehq.com/@declann/calculang-bouncing-ball?co...
[3] if you can tolerate my slow-load WIP devtools and are on a Desktop, this is better, with buttons to navigate through the model development (only some of which are working now!): https://models-on-a-plane.pages.dev/stories/bounce/
-
AI intensifies fight against āpaper millsā that churn out fake research
My instinct about numbers (i.e. incl. statistics) is that they should be reproducible: on-demand, with results and workings easily subjected to interrogation.
In reality in many fields - my experience is in finance, but also in science - calculations are scattered across different languages and systems. This adds friction to any process about reproducing, understanding, analysing numbers.
This is some motivation for calculang, a language for calculations I develop. https://github.com/calculang/calculang
For the HN crew it's an under-development(!) functional language with properties to permit flexible designs that can scale. It's for numbers and if you share the model alongside your numbers people can check them according to the model and see the workings.
It goes well with visual number [dev/person]tools that I will release one of soon, and in the future watch for a browser extension for the workings behind numbers you are reading.
Important, it won't address the raw data part of the problem, but where numbers following from that are concerned, it might get closer to that instinct.
-
Ask HN: Those making $0/month or less on side projects ā Show and tell
I'm developing calculang, a language for calculations: https://github.com/calculang/calculang
I've made some examples here: https://observablehq.com/collection/@declann/calculang
Some tooling work for visualizations and for showing the workings will be released in the next weeks.
There are no positive money flows; I've spent many years experimenting, developing, and now 1 year after a public release the twitter page where I make announcements has 24 followers: https://twitter.com/calculang
I'm a modelling consultant - I work with numbers, I think they should be simple, but they are disjointed across systems and entities and programming languages and spreadsheets. The friction accumulates everywhere: to get a simple result, to follow the workings, to do any analysis, to share one or the other.
-
How to store your app's entire state in the url
I'm developing more tools to these ends, via my overarching project calculang, a language for calculations [1].
I also have a loan/repayment validator [2] but haven't added this QR code feature yet.
Bank letters e.g. "Interest rates are rising and now we want 100e more per month, every month" could use a QR code to an independent validator or to see the workings behind the 100 calculation.
Not using this in the real world now and there are security considerations to keep in mind, but reading state from a URL facilitates the usecase, QR codes that link physical numbers to their calculation and model.
Implementation of payroll calculator is an Observable notebook and thankfully it neatly supports all my strict requirements as a QR code demo.
[0] https://observablehq.com/@declann/payroll-playground-ireland...
+Feature tweet: https://twitter.com/calculang/status/1608183731533107206
[1] https://github.com/calculang/calculang
[2] https://observablehq.com/@declann/loan-validator-dev
What are some alternatives?
web-llm - Bringing large-language models and chat to web browsers. Everything runs inside the browser with no server support.
summonscript - Manifest manifold models with magical machinations.
mutable - A Database System for Research and Fast Prototyping
CozeJS - Coze Javascript - cryptographic JSON messaging specification
chdb - chDB is an embedded OLAP SQL Engine š powered by ClickHouse
graphic-walker - An open source alternative to Tableau. Embeddable visual analytic
ch32v003fun - An open source software development stack for the CH32V003 10Ā¢ 48 MHz RISC-V Microcontroller - as well as many other chips within the ch32v/x line.
URLFormJS - URLFormJS - Create sticky forms, stateful applications, and shareable links.
bacalhau - Compute over Data framework for public, transparent, and optionally verifiable computation
sveltekit-search-params - The easiest way to read and WRITE from query parameters in sveltekit.
duckdb - DuckDB is an in-process SQL OLAP Database Management System
u - Ī¼ is a JavaScript library for encoding/decoding state (JavaScript object) in URL