Repository navigation
Releases: tinyshed/tinystore
Release list
v0.4.0
TinyStore 0.4.0
What's new, with code in every language: https://tinyshed.org/tinystore/docs/releases/v0.4.0
bun add @tinyshed/tinystore@0.4.0
npm install @tinyshed/tinystore@0.4.0
pip install tinyshed-tinystore==0.4.0Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
Changes since v0.3.0
Features
- metrics: mark metrics.db with a step of its migrations once it may hold this release's blocks, so that a release before refuses the file at its open rather than read them as damage
- sdk: open files in a database over the wire, in Bun, Node, Python and Go, their put, head, delete, copy and rename joining its transactions
- blobs: open a set of files in a database's file, whose writes commit with its rows in db.tx and whose bytes a rollback or a crash leaves to no one
- kv: open values with the store's older encryption keys, seal new ones beside those no key opens, and reseal a bucket with the key that seals
- metrics: aggregate series a program holds in memory as a store's query would, and sum floats exactly with ExactSum
- backup: copy every file of the store at one moment, so that a row naming what another file holds is restored with it
Fixes
- write the errors of a value sealed with a key the store lacks and of a files call a transaction refuses as one sentence each
- kv: reseal a batch of values no larger than 8 MiB, so that values of a mebibyte each never fill one commit
- backup: open the store's gate while a backup waits long for a writer, so that a transaction waiting for another thread's commit ends instead of the store's writes
- backup: build every engine alone again, sql's files named through to_copy and Copying read whole by its Debug
Performance
- metrics: hold up to 320 samples a block, so that a series of a sample a second packs a block every five minutes rather than every minute, a quarter less of metrics.db for pings a second
- metrics: pack a run's integers as rice codes where they are shorter than Simple8b words, an eighth less of a round trip's values
- metrics: keep a block's steps as their distance from its median step and write a group no merge takes in after every row, a third less of metrics.db for pings a second
Full history: v0.3.0...v0.4.0.
v0.3.0
TinyStore 0.3.0
What's new, with code in every language: https://tinyshed.org/tinystore/docs/releases/v0.3.0
bun add @tinyshed/tinystore@0.3.0
npm install @tinyshed/tinystore@0.3.0
pip install tinyshed-tinystore==0.3.0Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
Changes since v0.2.0
Changed names
- cli: read and aggregate metrics a page at a time, --limit a page and --after the next, which the JSON's last line gives
- sdk: read and aggregate metrics a page at a time over the wire, in Bun, Node, Python, Go and async Rust, a page walked on by its next
- metrics: aggregate a page at a time with limit and after, each page ending between whole buckets of a group
- metrics: read a range a page at a time with limit and after, each page stopping before a bound and its next going on from there
Features
- web: colour tinystore commands in shell blocks by their help, and read a typed command word by word in an explain block
- cli: print every command's help as JSON with help --all --json, each word a command takes with what it stands for
- cli: let tinystore mcp write with the tools --write names, a tool an operation, each marked for its host to ask
- cli: explain a config as the store keeps it, and update and reset its live settings from a shell
- cli: run a command while it holds a key with lock hold, and keep a quiet subscription open on unix
- cli: offer on tab what a misspelt word is a typo of when nothing starts with it
- cli: complete commands, flags and a store's names on tab in bash, zsh, fish and powershell, print every command with help --all, and list a store's names in status --json
- cli: publish to and subscribe to a channel from a shell, and let sql --write go through the server that holds the store
- cli: put, get, list and delete a set's files from a shell with tinystore files
- cli: add, list and cancel a queue's jobs from a shell with tinystore jobs
- cli: set and delete a bucket's key from a shell with kv set and kv delete, through the server that holds the store
- cli: follow a stream of prometheus text with metrics ingest -f, and send a text past one message in pieces
- cli: append events from a shell, one given in words or another program's output on stdin, and list a stream beside its holder
- cli: name, read, aggregate and delete metrics from a shell, a table for a person and a line of JSON a sample for a script
- cli: write a Prometheus text from a shell with metrics ingest, through the server that holds the store or a sidecar it starts
Fixes
- web: lay the explain out compactly on a phone, the command once over its words and each meaning on one line
- cli: stop a command whose lease was lost with a term before a kill, so that a script can end what it started
- wire: end the subscriptions, follows, tails and watches of a client that closed its side, rather than draining them for ten seconds
- cli: write a private child's frames through a file on its stdout, which on windows under node now and then left an answer half sent
- web: keep a playing scene inside a tour's step, off the line between its numbers
- cli: end a command quietly with exit 0 when its reader closes the pipe, as head does, rather than panic
Full history: v0.2.0...v0.3.0.
v0.2.0
TinyStore 0.2.0
What's new, with code in every language: https://tinyshed.org/tinystore/docs/releases/v0.2.0
bun add @tinyshed/tinystore@0.2.0
npm install @tinyshed/tinystore@0.2.0
pip install tinyshed-tinystore==0.2.0Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
Changes since v0.1.1
Changed names
-
records: an event may carry an id, kept with it and read back, and an append of an id its stream holds writes nothing (REC-11). An append now says whether it wrote:
SDK One event Several Rust append→Result<bool>, awaited tooappend_all→Result<usize>Bun, Node append(name, fields, options)→Promise<boolean>append(events)→Promise<number>Python append(name, fields, ...)→boolappend(events)→intGo Events.Append→(bool, error)AppendMany→(int, error)Code that ignored the result still builds in Rust, Bun, Node and Python; Go's
err := events.Append(...)becomes_, err := events.Append(...). The id is.id("…")in Rust,{ id }in Bun and Node,id=in Python andrecords.ID("…")in Go. A store 0.1.x wrote opens as it is: records adds its table of ids at the first open.
Features
- metrics: stream an exposition larger than one message from every sdk, written whole
- metrics,records: cut an aggregate into days, weeks or months of a time zone's calendar, a rate counting its bucket's own seconds
- jobs: bound each group's starts with a group rate beside the queue's, a job of a group past it waiting for its group's turn
- metrics: write an exposition of up to 100,000 samples whole in one write, ten ingests' worth
- config: load a rust program's settings without a store, a live setting refused by its path (CFG-10)
- metrics: give the names an exposition writes their family's help, and its unit where their values are in it, where describe gave none
- metrics: read prometheus 3's quoted metric and label names in an exposition, kept as they are, dots and all
- metrics: let an ingest sent again after packing change nothing, and name what its series has packed when a sample behind it differs (MET-16)
Fixes
- metrics: reserve the memory a prometheus text's series hold before reading it, and let each line's series go once gathered
- config: answer an awaited config loaded without a store as the blocking one does
- metrics: refuse an exposition's empty quoted name at its line, and say that the samples counter counts those sent again
- records: let go of an event's id once no part its stream keeps spans the event's time or a drop of damage removed it, and print the id in tinystore logs
- jobs: claim no job of a group rate ahead of a free handler, give a waiting job its group's next turn once, and give back the starts a failed claim counted
- release: list the commits since the release before in its notes, which the notes never called, those marked ! first under changed names
Performance
- jobs: read back a job's id, its lease's attempt and its spill with a select beside the write rather than returning
- metrics: register a series without insert returning, its pairs shared with the series before and the store's count written once a write
Full history: v0.1.1...v0.2.0.
v0.2.0-rc.1
TinyStore 0.2.0-rc.1
bun add @tinyshed/tinystore@0.2.0-rc.1
npm install @tinyshed/tinystore@0.2.0-rc.1
pip install tinyshed-tinystore==0.2.0rc1Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
Changes since v0.1.1
Changed names
- records: let an event carry an id, kept with it and read back, and let an append of an id its stream holds write nothing and answer false (REC-11)
Features
- metrics,records: cut an aggregate into days, weeks or months of a time zone's calendar, a rate counting its bucket's own seconds
- jobs: bound each group's starts with a group rate beside the queue's, a job of a group past it waiting for its group's turn
- metrics: write an exposition of up to 100,000 samples whole in one write, ten ingests' worth
- config: load a rust program's settings without a store, a live setting refused by its path (CFG-10)
- metrics: give the names an exposition writes their family's help, and its unit where their values are in it, where describe gave none
- metrics: read prometheus 3's quoted metric and label names in an exposition, kept as they are, dots and all
- metrics: let an ingest sent again after packing change nothing, and name what its series has packed when a sample behind it differs (MET-16)
Fixes
- config: answer an awaited config loaded without a store as the blocking one does
- metrics: refuse an exposition's empty quoted name at its line, and say that the samples counter counts those sent again
- records: let go of an event's id once no part its stream keeps spans the event's time or a drop of damage removed it, and print the id in tinystore logs
- jobs: claim no job of a group rate ahead of a free handler, give a waiting job its group's next turn once, and give back the starts a failed claim counted
- release: list the commits since the release before in its notes, which the notes never called, those marked ! first under changed names
Full history: v0.1.1...v0.2.0-rc.1.
v0.1.1
TinyStore 0.1.1
What's new, with code in every language: https://tinyshed.org/tinystore/docs/releases/v0.1.1
bun add @tinyshed/tinystore@0.1.1
npm install @tinyshed/tinystore@0.1.1
pip install tinyshed-tinystore==0.1.1Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
Changes since v0.1.0
Changed names
What a program may have to change, or should know, before it upgrades:
- records: a 0.1.1 store migrates
records.dbat its first open (migration 0002, which keeps the order events of one time were appended in), and v0.1.0 refuses that file afterwards. - config: each explain line gains
given, every value a setting was given with where it came from as data. In Rustconfig::Linegains a field, andLine,Explainedand the newOriginare#[non_exhaustive], so a struct literal or an exhaustive destructuring of them in another crate no longer compiles. In TypeScript an object typedExplainLineneedsgiven, in GoLineholds a slice and no longer compares with==, and in PythonLineequality comparesgiventoo. - records: a store's logger takes
level: { store, console }beside one level, andLOG_CONSOLE_LEVELsets the console's part. Python'sstore.log_handler(level=...)is now the store logger's level, whichLOG_LEVELand the configlogmove, and a level TinyStore does not know, such as'CRITICAL', is refused. - bun, node: a field or a
with()context whose value isundefinedis left out rather than written as"undefined", and areplacethat returnsundefineddrops its field. - errors: a store's directory that is a file, or sits under one, is
invalidin Rust and every SDK, where it wasclosed,ioorinternal. A binary that cannot start isclosed, "cannot start the sidecar : ". Python's embedded open says an io failure asinternal, the wire's code. - bun, node: a cancelled call throws
CancelledErrorrather than the signal'sDOMException, andwithSignal, Python's cancel and Go'sctxnow stopopenandconnecttoo. - new names:
CancellationToken;queue.addingin a database's batch;max_series(maxSeries,MaxSeries,serve --max-series);stats.prometheus().ingest(ingestPrometheus);tinystore::aiobehind theasyncfeature; explain'sgiven,fromandOrigin;Levels;LOG_CONSOLE_LEVEL.
Features
- records: let a store's logger keep and print at levels of their own, level: { store, console }, set by LOG_LEVEL and LOG_CONSOLE_LEVEL, and move LOG-05 so that each LOG_ variable wins over its own part
- config: give each explain line the values it was given, each with where it came from as data
- aio: open a database's buckets, queues and table indexes from the async database, their calls awaited, and say every engine's calls are
- aio: await metrics' ingest, queries, pages and descriptions, and a backup's write, each read stopped by its future's drop and each write run to its end off the polling thread
- aio: await records' appends, reads, polls, drops and flushes, and walk all and a tail as streams
- aio: await search's indexes, their sets and deletes submitted under a hold of the rows their commit drops, their searches on the pool and a ready the index wakes
- aio: await blobs' files, their reads in the poll or on the store's pool, their writes committed off the polling thread and their memory waited for on no thread
- aio: await sql's databases, tables and queries, their reads stopped by a dropped future and their commits led off the polling thread
- aio: await jobs' queues, claims, steps and schedules, read a page or a watch as a stream, and run a worker as a future that until stops
- aio: await a config's changes and a lock's or a semaphore's hold, and read a config's watch and a channel's messages as streams, none waiting on the thread that polls
- aio: await kv's buckets, counters, rate limits, quotas and once, writes queued in their first poll, point reads in it when a reader is idle, pages on the pool
- aio: add tinystore::aio, the async api: its store, tx and close awaited, reads on the store's pool stopped by a dropped future, writes led off the polling thread, waits that park no thread
- metrics: read prometheus' text format and openmetrics into series, one parser in the core for every sdk
- sql: let a batch carry a queue's add, queue.adding, so a row and its job commit together and still group, every sdk
- sqlite: stop a read whose token is cancelled or timed out, and a query whose client cancels it
- sqlite: give records.db's and metrics.db's free pages back to the disk in maintenance, and vacuum a small file of 0.1.0 once
- metrics: let a store hold more than 100,000 series, max_series in its options, every sdk and serve
- release: list the commits since the last release in its notes
- check every engine's names alike and offer the nearest name a refused one could be
- sdk: add the tinystore command to the go sdk, the release's binary fetched once and run with its arguments
- sql: say that a migration's name ends with .sql when only its extension is missing
- store: say that a server holds the directory and how to stop it when its lock is taken
- cli: read a bucket or a queue a program opened from its database, in kv and the mcp tools
Fixes
- records: leave a field whose value is undefined out of a bun or node logger's line and of an appended event, as JSON.stringify and pino do, and let a replace that returns undefined drop its field (LOG-09)
- sdk: stop open and connect at the caller's own cancel and leave nothing behind, and let a store's close stop a dial under way, its waiting calls failing closed
- sdk: say why a store does not start: a directory that is a file is invalid in every way, a binary that is not there is named, and a sidecar that exits says what it wrote to stderr
- blobs: pass a folder's clear on a copy to its home, where it failed writing the copy's read-only file
- records: give events of one time in the order they were appended, across streams, late heads and merges, each block of version 3 keeping their arrivals and migration 0002 keeping v0.1.0 off the file
- records: read ahead under the caller's cancellation tokens, so that a cancel stops a count's threads where they read
- cli: give a windows server's SERVE, server folder and named pipe a protected dacl of its user alone, so that no other local user reads the secret or connects
- sql: answer a go transaction by its commit's answer rather than by a ctx that ended after it, and send no commit once a ctx or a signal has ended
- sdk: cancel a store's subscriptions, each loops, tails and watches at its close in bun, node and python, which kept a private child or a sidecar draining for ten seconds
- sdk: dial no connection after a bun or node store's close, which a call waiting on a failed dial started and nothing closed
- sdk: keep python's dial going for the next call when the call that started it is cancelled, so that close closes its connection
- kv: keep a go uint64 and uint as rust's u64 and a float32 as its f32, so that go and rust read each other's rows, and add their rows to the vectors
- sdk: wake a go call waiting for a free stream when one frees, not a call whose context gave up before it
- sdk: stop a go store's close from reading its stops while subscriptions that ended take theirs off, which could abort the process
- sdk: send a write again on the next connection when the connection was lost while its handle opened, in every sdk, where it said outcome_unknown
- sql: answer outcome_unknown for a transaction whose commit left and lost its connection or its wait, in every sdk, where it said closed
- sdk: keep a REQUEST a GOAWAY refused from leaving once credit comes back, which ended the connection under the streams the server was finishing
- replication: close a tls link whose handshake or hello trickles in past its bound, as a plain one is
- replication: name a commit a crash left past a copy's position only for the entry whose pages it holds
- replication: refuse a judged home's transaction that would commit after its lease ran out or another node took the file
- replication: close a link that shows no token in time or sends more than a hello before it, and hold few such links
- replication: refuse the writes of a file whose hand-over fenced it while its log was opening
- replication: count a copy's hold toward a synchronous commit only of entries of its home's own chain
- replication: time a home's lease from the ask its witness answered, not from the latest it sent
- replication: give a lease that ran out to the copy of the latest epoch, not to one further on in an older home's chain
- replication: sync a copy's log before the position it checkpoints at, so that a power loss does not send the copy and its nodes back to a snapshot
- replication: cut off what an append that failed partway wrote, so that the nodes reading a copy's log do not fail at it
- replication: leave a home file's wal to its log when a backup or a check reads the file before its engine opens it
- replication: carry a snapshot, a file and a write of any size over tls, and read records that end anywhere in a read
- wire: hold a call that starts while its connection owes past 8 MiB until its client reads, so that one write of many large reads no longer grows the server's memory
- cli: end a connection whose client leaves while the server holds it at the pipe's bound, which no read would end
- protocol: write docs/wire.md's tables of engines and methods from protocol/*.wire and check them, so that a client written from the page calls the numbers the server answers
- wire: read no frame more of a client the connection owes past 8 MiB until it takes some, a...
v0.1.0
TinyStore 0.1.0
What's new, with code in every language: https://tinyshed.org/tinystore/docs/releases/v0.1.0
bun add @tinyshed/tinystore@0.1.0
npm install @tinyshed/tinystore@0.1.0
pip install tinyshed-tinystore==0.1.0Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
v0.1.0-rc.7
TinyStore 0.1.0-rc.7
bun add @tinyshed/tinystore@0.1.0-rc.7
npm install @tinyshed/tinystore@0.1.0-rc.7
pip install tinyshed-tinystore==0.1.0rc7Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
v0.1.0-rc.6
TinyStore 0.1.0-rc.6
bun add @tinyshed/tinystore@0.1.0-rc.6
npm install @tinyshed/tinystore@0.1.0-rc.6
pip install tinyshed-tinystore==0.1.0rc6Built for linux-x64, linux-arm64, linux-x64-musl, linux-arm64-musl, darwin-arm64, darwin-x64, win32-x64. Each archive holds the
tinystore executable in bin/, and in lib/ the core's library and the Node addon; the Go
SDK fetches its platform's at the first open. SHA256SUMS checks them all.
v0.1.0-rc.5
Features
- docs: generate an API reference of every engine in Go, Bun and Python from the source, with one llms file per language
Fixes
- web: resolve and check the links inside a table, which the site left as written
- release: give each pre-release npm's next tag, and latest beside it while no stable release exists
Install
| Go | go get github.com/tinyshed/tinystore@v0.1.0-rc.5 |
| Bun, Node | bun add @tinyshed/tinystore@0.1.0-rc.5, npm install @tinyshed/tinystore@0.1.0-rc.5 |
| Python | pip install tinyshed-tinystore==0.1.0rc5 |
| the command | bunx @tinyshed/tinystore@0.1.0-rc.5, uvx --from tinyshed-tinystore==0.1.0rc5 tinystore, go install github.com/tinyshed/tinystore/cmd/tinystore@v0.1.0-rc.5 |
| a server | docker pull ghcr.io/tinyshed/tinystore:0.1.0-rc.5 |
| the binary | an archive below, checked against SHA256SUMS |
Every change: v0.1.0-rc.4...v0.1.0-rc.5
v0.1.0-rc.4
Features
- web: slide the menu in with the current page in view, keep the page still under it, and drop the browser's blue tap
- kv: give a config its layers in the order they win, read the environment only through fromEnv, and mark a secret or a required field where it is declared
- records: choose a pretty line's time and stream and where the console writes, and let LOG_LEVEL, LOG_FORMAT and LOG_TIME change a logger without a build
Install
| Go | go get github.com/tinyshed/tinystore@v0.1.0-rc.4 |
| Bun, Node | bun add @tinyshed/tinystore@0.1.0-rc.4, npm install @tinyshed/tinystore@0.1.0-rc.4 |
| Python | pip install tinyshed-tinystore==0.1.0rc4 |
| the command | bunx @tinyshed/tinystore@0.1.0-rc.4, uvx --from tinyshed-tinystore==0.1.0rc4 tinystore, go install github.com/tinyshed/tinystore/cmd/tinystore@v0.1.0-rc.4 |
| a server | docker pull ghcr.io/tinyshed/tinystore:0.1.0-rc.4 |
| the binary | an archive below, checked against SHA256SUMS |
Every change: v0.1.0-rc.3...v0.1.0-rc.4