Skip to content

Releases: flomesh-io/pipy

1.1.0

26 Apr 03:13
Compare
Choose a tag to compare
  • Support loading/attaching of all types of BPF programs
  • Support multithread-aware concurrency limit per port
  • New API for cryptographic key generation and X.509 certificate signing
  • New http.Match API for path-based routing
  • More OS related API: os.home(), os.mkdir(), os.rmdir()
  • Support changing the log level on-the-fly via the administration API
  • New samples showcasing various usecases including traffic interception via eBPF, global rate limiting, MITM proxy, etc.

1.0.0

07 Mar 07:28
Compare
Choose a tag to compare
  • Support JavaScript statements including if/else, switch/case, break, return, try/catch and throw
  • Support function scope local variables defined by using the 'var' and 'function' keywords
  • Support ES module export/import
  • Support shebang line for direct script execution from the shell
  • New Pipeline API using fibers (preview)
  • New LoadBalancer API
  • Other new APIs including YAML parsing, metric gathering, percentile calculation and high-resolution performance timer, etc.

0.99.1

02 Feb 01:39
Compare
Choose a tag to compare
  • Added support of Netlink sockets
  • Added basic support of FastCGI
  • New filters and APIs: encodeNetlink(), decodeNetlink(), demuxFastCGI(), muxFastCGI(), produce(), DNS.resolve()
  • Standard-compliant improvements of JavaScript Number and Array APIs
  • Support loading of BPF programs with BTF parsing
  • Support watching file changes in filesystem codebases
  • Support UTF-16 encoding
  • Worker to repo metric collection by HTTP POST in lieu of WebSocket
  • Worker to repo metric value deletion mechanism
  • Added logging for requests to repo
  • Ported to Windows
  • Migrated to OpenSSL 3.2

0.99.0

13 Nov 03:39
Compare
Choose a tag to compare
  • Support cross-thread pipeline linking using linkAsync() filter
  • Support Tongsuo NTLS cryptography library
  • New API for enumerating/operating current inbound connections
  • New API for operating SQLite databases
  • New API for serving static HTTP directories
  • Options for replacing the builtin admin front-end

0.90.3

25 Aug 06:51
Compare
Choose a tag to compare
  • Ability to define process exit handlers and custom admin port handlers
  • Ability to dump buffer usage by filters
  • New API for operating outbound connections
  • New API for batch opening/closing listening ports
  • Optimized memory consumption by the logging system
  • Add stress tests

0.90.2

03 Jul 10:38
Compare
Choose a tag to compare
  • Support eBPF map operations
  • Network layer performance improvement
  • Benchmark test suite

0.90.1

18 Apr 01:54
8c30f1b
Compare
Choose a tag to compare
  • New codec for BGP
  • Filters muxQueue() and demuxQueue() are merged into mux() and demux()

0.90.0

26 Jan 01:46
Compare
Choose a tag to compare

0.90.0

Core

  • Run multiple workers in concurrent threads
  • Process-wide metric and log aggregation
  • Multi-threading support in NMI
  • Regularly frees up excess memory space retained in all pools
  • Boost Asio version bumped from 1.12.2 to 1.24.0

PipyJS

  • Optimized function call performance
  • Call stack depth limited to 100
  • ECMAScript compliance improvements

Filter API

  • Configuration time static branch using the branch() filter
  • Added an option to bind to a specified local IP in connect()
  • Added keepAlive option to listen() and connect()
  • Inbound connection metrics by remote IP is now optional
  • HTTP decoder performance optimization

Admin API

  • Added dedicated endpoint /api/v1/repo-files/* for repo file operations
  • Added endpoint /dump/* for listing detailed memory usage info
  • Send SIGTSTP to toggle on/off the admin port on the fly

Testing

  • New testing framework
  • Added service mesh sidecar sample
  • Added multi-threading NMI sample

0.70.0

21 Oct 01:31
Compare
Choose a tag to compare

0.70.0

Core

  • NMI (Native Module Interface) for dynamically loaded modules written in C
  • New module/plugin system by using chain() filters
  • Support loop logic in pipelines by using the new replay() filter
  • Builtin GUI frontend greatly reduced in size by using Brotli compression

Protocols

  • Support Thrift protocol
  • Support the Proxy protocol proposed by HAProxy
  • Support outbound UDP with ephemeral local ports
  • Support TPROXY on UDP

API

  • Implementation of the standard ECMAScript builtin objects Map and Set
  • Encode and decode DNS messages
  • Logging API now supports HTTPS receivers and Syslog
  • Expose subject alternative names of a certificate
  • Mux filters to support limit of maximum messages per session
  • Netmask API now supports IPv6

Documentation & Samples

  • Renovation of the documentation system by using TypeScript
  • All new tutorials with complete API reference
  • New samples for HTTP proxy common use cases

0.50.0

18 Jul 07:24
Compare
Choose a tag to compare

0.50.0

Core

Pipelines

  • New pipeline type for reading from files (or stdin)
  • Added onStart()/onEnd() pipeline lifecycle callbacks
  • Support idle timeout for inbound and outbound connections
  • Transparent mode port listening
  • Socket reading performance optimization

Metrics

  • Collect metrics on a repo node from all workers connected to it
  • Record metric history on a repo node for up to 5 minutes for charts showing on the Admin UI
  • Expose metrics from a repo node to Prometheus with gzip compression
  • Added new metrics for inbound/outbound data and connection times

Logging

  • Send real-time log streams from workers to the repo

Codebases

  • Send codebase update notifications to workers via WebSocket to reload script with no delay
  • Support deletion of a codebase

PipyJS

  • New nesting syntax for in-place anonymous sub-pipelines
  • Added pipy.solve() to evaluate script from external files
  • Added -e option for evaluating PipyJS script from the command line
  • Support function argument default values
  • String size upper limit raised to 256MB
  • Performance optimization of object literal construction

Protocols

HTTP/2 & gRPC

  • Support full HTTP/2 specification except for server push
  • Extended demuxHTTP()/muxHTTP() to support HTTP/2 protocol negotiation

HTTP/1.x

  • Support HTTP message trailers
  • Proper handling of responses with status code 100
  • Detect plain HTTP/1 traffic by detectProtocol() filter
  • HTTP/1.x decoder performance optimization

MQTT

  • Added a new pipeline communication model for MQTT-like protocols using input()/output() filters
  • Standard-conformance bug fixes

WebSocket

  • Added WebSocket codecs
  • Added a communication channel between the worker and the repo via WebSocket

UDP

  • Added UDP listeners

TLS

  • Support ALPN in acceptTLS() and connectTLS() filters
  • OpenSSL version bumped to 1.1.1o

API

  • New API for general purpose logging
  • Added algo.Quota as a replacement of the old "accounts" used by throttling filters
  • Added Data.shiftWhile() and shiftTo() for simple data format parsing in PipyJS
  • Added LoadBalancer.next() with builtin connection pools
  • Added algo.uuid() for UUIDv4 generation
  • JSON.encode() performance optimization

Filters

  • New filter branch() that supports conditional embedded anonymous sub-pipelines
  • New filter depositMessage() for buffering large messages in a temp file
  • New filter deframe() for general purpose protocol deframing using PipyJS
  • New filter compressMessage() for deflate/gzip compression
  • New filter decodeMultipart() for decoding a MIME multipart message into multiple messages
  • Support caps on the maximum queue size per session for all muxer filters
  • Support Brotli algorithm in decompressMessage() filter
  • Support writing to stdout using tee()
  • Support timeout in filter wait()

Change Log:

  • [fix] package binary only, without the dictionaries 7f39037 (York Wong)
  • [doc] Add explanation for connection pools inside a load balancer 72c0992 (pajama-coder)
  • [fix] Silence a variable-not-used warning f1d33ce (pajama-coder)
  • [doc] Put away the old tutorial articles after step 7 into /docs/guides a78ead0 (pajama-coder)
  • [doc] Update tutorial step 6: Configuration b564183 (pajama-coder)
  • Tiny fix in 02-echo 805697f (shader13)
  • [fix] Crash when calling to a literal function defined in a function argument default value aaec71f (pajama-coder)
  • [doc] Reorder the old tutorial step 5 plugins to step 7 637d239 (pajama-coder)
  • [core] When evaluation result is an object other than Configuration, show its content by converting to JSON 44558ff (pajama-coder)
  • [doc] Upgrade tutorial step 5 5db6531 (pajama-coder)
  • [doc] Upgrade tutorial step 4 3f00fa1 (pajama-coder)
  • [doc] Fix an incorrect sample output in the tutorial 1fa9db0 (pajama-coder)
  • Modify tutorial 02-echo 79bb6eb (shader13)
  • Avoid multiple set_pending on Endpoint::StreamBase. (#93) 3d043b5 (pfans)
  • Modify concepts and tutorial hello fb54845 (shader13)
  • [fix] Fix a crash when receiving an empty WebSocket command from the AdminLink 1d835d4 (pajama-coder)
  • [fix] HTTP codec should notify about turning into a tunnel as early as possible but only change its own mode after MessageEnd 50ebe47 (pajama-coder)
  • [fix] Filter acceptHTTPTunnel failed to handle WebSocket due to the wrong timing of connection upgrade 3ba38bd (pajama-coder)
  • [fix] Missing header file compiling on Ubuntu 53da455 (pajama-coder)
  • [doc] Update Tutorial 3: Proxy 0639fed (pajama-coder)
  • [doc] Update tutorial step 1 and 2 to reflect the latest changes f660431 (pajama-coder)
  • [doc] Update introduction materials in the docs and README 490b406 (pajama-coder)
  • [doc] Revise document Concepts as per the latest changes 58daca5 (pajama-coder)
  • [filter] New filter decodeMultipart() 9f595aa (pajama-coder)
  • [chore] Git ignore openssl-1.1.1q/build/ 6c20f25 (pajama-coder)
  • [core] Flowchart generation takes into account to() using pipeline names as its parameter 9a327f8 (pajama-coder)
  • [gui] Improve the flowchart by running filter output lines out of the right-side of the boxes 206247d (pajama-coder)
  • [pjs] Undefined elements should be put to the last when sorting arrays e6937ab (pajama-coder)
  • [pjs] No need to destruct values again when recycling array data back to the pool 464aaa2 (pajama-coder)
  • [api] Seed the random generator with high resolution clock 7cca383 (pajama-coder)
  • [fix] A typo that caused the pjs::Data of pjs::Array never getting recycled back to the pool dad0f4a (pajama-coder)
  • [fix] A crash in the destruction of the system logger at quit time 49e6a8b (pajama-coder)
  • [api] Make RoundRobinLoadBalancer output deterministic results 2806446 (pajama-coder)
  • [gui] Delete old log data shown in the browser when it's over 256KB ef592b8 (pajama-coder)
  • [gui] Better starting code template after creating a new codebase 323e318 (pajama-coder)
  • [fix] Math.random() wasn't randomly seeded 67d49c4 (pajama-coder)
  • [gui] Real-time log view had an unwanted gap on the bottom, now it's removed 00890cb (pajama-coder)
  • [filter] Do not alter a sub-pipeline's context directly in fork(), instead, pass initial arguments to its onStart() callback ded8037 (pajama-coder)
  • [fix] LoadBalancers shouldn't have called the pure virtual function deselect() while destructing ae95c8c (pajama-coder)
  • [fix] Anonymous pipeline layouts were not showing their source locations in the debug log while creating/destroying 49a4d22 (pajama-coder)
  • [filter] Changed split() filter to be used to split a message into multiple ones based on a given separator string 3ae0df4 (pajama-coder)
  • [core] Output only clean result to stdout when running as a general expression evaluator 156fe0f (pajama-coder)
  • [core] Do not start pipeline with a default emtpy message. Instead, rely on onStart() for that matter. e1e9010 (pajama-coder)
  • [chore] npm audit fix 0afab81 (pajama-coder)
  • Update openssl dep (#89) 8359401 (Ali Naqvi)
  • [fix] Resolved files should be cleared when worker stops a91d1a0 (pajama-coder)
  • [fix] MuxBase::SessionManager was deleted while SessionCluster is still needed by a weak ref in LoadBalancer, which led to a crash d367c5c (pajama-coder)
  • [fix] Function arguments destructure failed for arguments other than the first one edadf25 (pajama-coder)
  • [fix] Scripts in onStart() was triggered before the pipeline is fully connected, which led to some weird behaviours 9cdae79 (pajama-coder)
  • [pjs] Graph pipeline networks from scripts using comma separated expressions 3a5ca84 (pajama-coder)
  • [core] Repo to clean up instance status/metrics for inactive instances 2980108 (pajama-coder)
  • [core] Extend the default maxIdle from 10sec to 1min since we can now close up idle sessions in muxers immediately at shutdowns 9bf3fc1 (pajama-coder)
  • [fix] Events from onStart() missed an InputContext, which led to a crash in some cases 4cfc013 (pajama-coder)
  • [core] Do not send empty Data at the start of an Inbound, instead, user script can do that with onStart() 0892a2c (pajama-coder)
  • [core] Remove the clos...
Read more