Releases: flomesh-io/pipy
Releases · flomesh-io/pipy
1.1.0
- 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
- 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
- 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
- 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
- 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
- Support eBPF map operations
- Network layer performance improvement
- Benchmark test suite
0.90.1
- New codec for BGP
- Filters muxQueue() and demuxQueue() are merged into mux() and demux()
0.90.0
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
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
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...