Skip to content

Releases: tinyshed/tinystore

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 11:19

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.0

Built 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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 21:45

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.0

Built 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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 00:26

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.0

Built 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 too append_all → Result<usize>
    Bun, Node append(name, fields, options) → Promise<boolean> append(events) → Promise<number>
    Python append(name, fields, ...) → bool append(events) → int
    Go 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 and records.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

v0.2.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Oct 23:09

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.0rc1

Built 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

Choose a tag to compare

@github-actions github-actions released this 24 Oct 16:25

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.1

Built 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.db at 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 Rust config::Line gains a field, and Line, Explained and the new Origin are #[non_exhaustive], so a struct literal or an exhaustive destructuring of them in another crate no longer compiles. In TypeScript an object typed ExplainLine needs given, in Go Line holds a slice and no longer compares with ==, and in Python Line equality compares given too.
  • records: a store's logger takes level: { store, console } beside one level, and LOG_CONSOLE_LEVEL sets the console's part. Python's store.log_handler(level=...) is now the store logger's level, which LOG_LEVEL and the config log move, and a level TinyStore does not know, such as 'CRITICAL', is refused.
  • bun, node: a field or a with() context whose value is undefined is left out rather than written as "undefined", and a replace that returns undefined drops its field.
  • errors: a store's directory that is a file, or sits under one, is invalid in Rust and every SDK, where it was closed, io or internal. A binary that cannot start is closed, "cannot start the sidecar : ". Python's embedded open says an io failure as internal, the wire's code.
  • bun, node: a cancelled call throws CancelledError rather than the signal's DOMException, and withSignal, Python's cancel and Go's ctx now stop open and connect too.
  • new names: CancellationToken; queue.adding in a database's batch; max_series (maxSeries, MaxSeries, serve --max-series); stats.prometheus().ingest (ingestPrometheus); tinystore::aio behind the async feature; explain's given, from and Origin; 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...
Read more

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 23:52

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.0

Built 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

v0.1.0-rc.7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:15

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.0rc7

Built 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

v0.1.0-rc.6 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 21:19

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.0rc6

Built 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

v0.1.0-rc.5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Oct 12:31

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

v0.1.0-rc.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 04 Oct 11:49

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