| PIP-1 | Pulsar Proxy |
| PIP-2 | Non Persistent topic |
| PIP-3 | Message dispatch throttling |
| PIP-4 | Pulsar End to End Encryption |
| PIP-5 | Event time |
| PIP-6 | Guaranteed Message Deduplication |
| PIP-7 | Pulsar Failure domain and Anti affinity namespaces |
| PIP-8 | Pulsar beyond 1M topics |
| PIP-9 | Adding more Security checks to Pulsar Proxy |
| PIP-10 | Remove cluster for namespace and topic names |
| PIP-11 | Short topic names |
| PIP-12 | Introduce builder for creating Producer Consumer Reader |
| PIP-13 | Subscribe to topics represented by regular expressions |
| PIP-14 | Topic compaction |
| PIP-15 | Pulsar Functions |
| PIP-16 | Pulsar “instance” terminology change |
| PIP-17 | Tiered storage for Pulsar topics |
| PIP-18 | Pulsar Replicator |
| PIP-19 | Pulsar SQL |
| PIP-20 | Mechanism to revoke TLS authentication |
| PIP-21 | Pulsar Edge Component |
| PIP-22 | Pulsar Dead Letter Topic |
| PIP-23 | Message Tracing By Interceptors |
| PIP-24 | Simplify memory settings |
| PIP-25 | Token based authentication |
| PIP-26 | Delayed Message Delivery |
| PIP-27 | Add checklist in github pull request template |
| PIP-28 | Pulsar Proxy Gateway Improvement |
| PIP-29 | One package for both pulsar-client and pulsar-admin |
| PIP-30 | change authentication provider API to support mutual authentication |
| PIP-31 | Transaction Support |
| PIP-32 | Go Function API, Instance and LocalRun |
| PIP-33 | Replicated subscriptions |
| PIP-34 | Add new subscribe type Key_shared |
| PIP-35 | Improve topic lookup for topics that have high number of partitions |
| PIP-36 | Max Message Size |
| PIP-37 | Large message size handling in Pulsar |
| PIP-38 | Batch Receiving Messages |
| PIP-39 | Namespace Change Events |
| PIP-40 | Pulsar Manager |
| PIP-41 | Pluggable Protocol Handler |
| PIP-42 | KoP - Kafka on Pulsar |
| PIP-43 | producer send message with different schema |
| PIP-44 | Separate schema compatibility checker for producer and consumer |
| PIP-45 | Pluggable metadata interface |
| PIP-46 | Next-gen Proxy |
| PIP-47 | Time Based Release Plan |
| PIP-48 | hierarchical admin api |
| PIP-49 | Permission levels and inheritance |
| PIP-50 | Package Management |
| PIP-51 | Tenant policy support |
| PIP-52 | Message dispatch throttling relative to publish rate |
| PIP-53 | Contribute DotPulsar to Apache Pulsar |
| PIP-54 | Support acknowledgement at batch index level |
| PIP-55 | Refresh Authentication Credentials |
| PIP-56 | Python3 Migration |
| PIP-57 | Improve Broker's Zookeeper Session Timeout Handling |
| PIP-58 | Support Consumers Set Custom Retry Delay |
| PIP-59 | gPRC Protocol Handler |
| PIP-60 | Support Proxy server with SNI routing |
| PIP-61 | Advertised multiple addresses |
| PIP-62 | Move connectors, adapters and Pulsar Presto to separate repositories |
| PIP-63 | Readonly Topic Ownership Support |
| PIP-64 | Introduce REST endpoints for producing, consuming and reading messages |
| PIP-65 | Adapting Pulsar IO Sources to support Batch Sources |
| PIP-66 | Pulsar Function Mesh |
| PIP-67 | Pulsarctl - An alternative tools of pulsar-admin |
| PIP-68 | Exclusive Producer |
| PIP-69 | Schema design for Go client |
| PIP-70 | Introduce lightweight broker entry metadata |
| PIP-71 | Pulsar SQL migrate SchemaHandle to presto decoder |
| PIP-72 | Introduce Pulsar Interface Taxonomy: Audience and Stability Classification |
| PIP-73 | Configurable data source priority for message reading |
| PIP-74 | Pulsar client memory limits |
| PIP-75 | Replace protobuf code generator |
| PIP-76 | Streaming Offload |
| PIP-77 | Contribute Supernova to Apache Pulsar |
| PIP-78 | Generate Docs from Code Automatically |
| PIP-79 | Reduce redundant producers from partitioned producer |
| PIP-80 | Unified namespace-level admin API |
| PIP-81 | Split the individual acknowledgments into multiple entries |
| PIP-82 | Tenant and namespace level rate limiting |
| PIP-83 | Pulsar client: Message consumption with pooled buffer |
| PIP-84 | Pulsar client: Redeliver command add epoch |
| PIP-85 | Expose Pulsar-Client via Function/Connector BaseContext |
| PIP-86 | Pulsar Functions: Preload and release external resources |
| PIP-87 | Upgrade Pulsar Website Framework (Docusaurus) |
| PIP-88 | Replicate schemas across multiple |
| PIP-89 | Structured document logging |
| PIP-90 | Expose broker entry metadata to the client |
| PIP-91 | Separate lookup timeout from operation timeout |
| PIP-92 | Topic policy across multiple clusters |
| PIP-93 | Transaction performance tools |
| PIP-94 | Message converter at broker level |
| PIP-95 | Smart Listener Selection with Multiple Bind Addresses |
| PIP-96 | Message payload processor for Pulsar client |
| PIP-97 | Asynchronous Authentication Provider |
| PIP-98 | Redesign Pulsar Information Architecture |
| PIP-99 | Pulsar Proxy Extensions |
| PIP-100 | Pulsar pluggable topic factory |
| PIP-101 | Add seek by index feature for consumer |
| PIP-104 | Add new consumer type: TableView |
| PIP-105 | Support pluggable entry filter in Dispatcher |
| PIP-106 | Negative acknowledgment backoff |
| PIP-107 | Introduce the chunk message ID PIP |
| PIP-108 | Pulsar Feature Matrix (Client and Function) |
| PIP-109 | Introduce Bot to Improve Efficiency of Developing Docs |
| PIP-110 | Topic metadata |
| PIP-111 | Add messages produced by Protocol Handler When checking maxMessagePublishBufferSizeInMB |
| PIP-112 | Generate Release Notes Automatically |
| PIP-116 | Create Pulsar Writing Style Guide |
| PIP-117 | Change Pulsar Standalone defaults |
| PIP-118 | Do not restart brokers when ZooKeeper session expires |
| PIP-119 | Enable consistent hashing by default on KeyShared dispatcher |
| PIP-120 | Enable client memory limit by default |
| PIP-121 | Pulsar cluster level auto failover |
| PIP-122 | Change loadBalancer default loadSheddingStrategy to ThresholdShedder |
| PIP-123 | Introduce Pulsar metadata CLI tool |
| PIP-124 | Create init subscription before sending message to DLQ |
| PIP-129 | Introduce intermediate state for ledger deletion |
| PIP-130 | Apply redelivery backoff policy for ack timeout |
| PIP-131 | Resolve produce chunk messages failed when topic level maxMessageSize is set |
| PIP-132 | Include message header size when check maxMessageSize for non-batch message on the client side |
| PIP-135 | Include MetadataStore backend for Etcd |
| PIP-136 | Sync Pulsar policies across multiple clouds |
| PIP-137 | Pulsar Client Shared State API |
| PIP-143 | Support split bundle by specified boundaries |
| PIP-144 | Making SchemaRegistry implementation configurable |
| PIP-146 | ManagedCursorInfo compression |
| PIP-148 | Create Pulsar client release notes |
| PIP-149 | Making the REST Admin API fully async |
| PIP-152 | Support subscription level dispatch rate limiter setting |
| PIP-154 | Max active transaction limitation for transaction coordinator |
| PIP-155 | Drop support for Python2 |
| PIP-156 | Build and Run Pulsar Server on Java 17 |
| PIP-157 | Bucketing topic metadata to allow more topics per namespace |
| PIP-160 | Make transactions work more efficiently by aggregation operation for transaction log and pending ack store |
| PIP-161 | Exclusive Producer: new mode ExclusiveWithFencing |
| PIP-162 | LTS Releases |
| PIP-165 | Auto release client useless connections |
| PIP-173 | Create a built-in Function implementing the most common basic transformations |
| PIP-174 | Provide new implementation for broker dispatch cache |
| PIP-175 | Extend time based release process |
| PIP-176 | Refactor Doc Bot |
| PIP-177 | Add the classLoader field for SchemaDefinition |
| PIP-178 | Multiple snapshots for transaction buffer |
| PIP-179 | Support the admin API to check unknown request parameters |
| PIP-180 | Shadow Topic, an alternative way to support readonly topic ownership |
| PIP-181 | Pulsar Shell |
| PIP-182 | Provide new load balance placement strategy implementation for ModularLoadManagerStrategy |
| PIP-183 | Reduce unnecessary REST call in broker |
| PIP-184 | Topic specific consumer priorityLevel |
| PIP-186 | Introduce two phase deletion protocol based on system topic |
| PIP-187 | Add API to analyse a subscription backlog and provide a accurate value |
| PIP-188 | Cluster migration or Blue-Green cluster deployment support in Pulsar |
| PIP-189 | No batching if only one message in batch |
| PIP-190 | Simplify documentation release and maintenance strategy |
| PIP-191 | Support batched message using entry filter |
| PIP-192 | New Pulsar Broker Load Balancer |
| PIP-193 | Sink preprocessing Function |
| PIP-194 | Pulsar client: seek command add epoch |
| PIP-195 | New bucket based delayed message tracker |
| PIP-198 | Standardize PR Naming Convention using GitHub Actions |
| PIP-201 | Extensions mechanism for Pulsar Admin CLI tools |
| PIP-204 | Extensions for broker interceptor |
| PIP-205 | Reactive Java client for Apache Pulsar |
| PIP-209 | Separate C++/Python clients to own repositories |
| PIP-243 | Register Jackson Java 8 support modules by default |
| PIP-249 | Pulsar website redesign |
| PIP-259 | Make the config httpMaxRequestHeaderSize of the pulsar web server to configurable |
| PIP-261 | Restructure Getting Started section |
| PIP-264 | Support OpenTelemetry metrics in Pulsar |
| PIP-265 | PR-based system for managing and reviewing PIPs |
| PIP-275 | Rename numWorkerThreadsForNonPersistentTopic to topicOrderedExecutorThreadNum |
| PIP-276 | Add pulsar prefix to topic_load_times metric |
| PIP-277 | Add current cluster marking to clusters list command |
| PIP-278 | Pluggable topic compaction service |
| PIP-279 | Support topic-level policies using TableView API |
| PIP-280 | Refactor CLI Argument Parsing Logic for Measurement Units using JCommander's custom converter |
| PIP-281 | Add notifyError method on PushSource |
| PIP-282 | Add Key_Shared subscription initial position support |
| PIP-284 | Migrate topic policies implementation to use TableView |
| PIP-286 | Support get position based on timestamp with topic compaction |
| PIP-289 | Secure Pulsar Connector Configuration |
| PIP-290 | Support message encryption in WebSocket proxy |
| PIP-292 | Enforce token expiration time in the Websockets plugin |
| PIP-293 | Support reader to read compacted data |
| PIP-296 | Add getLastMessageIds API for Reader |
| PIP-297 | Support terminating Function & Connector with the fatal exception |
| PIP-298 | Support read transaction buffer snapshot segments from earliest |
| PIP-299 | Support setting max unacked messages at subscription level |
| PIP-300 | Add RedeliverCount field to CommandAck |
| PIP-301 | Separate load data storage from configuration metadata store |
| PIP-302 | Support for TableView with strong read consistency |
| PIP-303 | Support PartitionedTopicStats exclude publishers and subscriptions |
| PIP-305 | Add OpAddEntry and pendingData statistics info in JVM metrics |
| PIP-306 | Support subscribing multi topics for WebSocket |
| PIP-307 | Optimize Bundle Unload(Transfer) Protocol for ExtensibleLoadManager |
| PIP-312 | Use StateStoreProvider to manage state in Pulsar Functions endpoints |
| PIP-313 | Support force unsubscribe using consumer api |
| PIP-315 | Configurable max delay limit for delayed delivery |
| PIP-318 | Don't retain null-key messages during topic compaction |
| PIP-320 | OpenTelemetry Scaffolding |
| PIP-321 | Split the responsibilities of namespace replication-clusters |
| PIP-322 | Pulsar Rate Limiting Refactoring |
| PIP-323 | Complete Backlog Quota Telemetry |
| PIP-324 | Switch to Alpine Linux base Docker images |
| PIP-325 | Support reading from transaction buffer for pending transaction |
| PIP-326 | Create a BOM to ease dependency management |
| PIP-327 | Support force topic loading for unrecoverable errors |
| PIP-329 | Strategy for maintaining the latest tag to Pulsar docker images |
| PIP-330 | getMessagesById gets all messages |
| PIP-335 | Support Oxia metadata store plugin |
| PIP-337 | SSL Factory Plugin to customize SSLContext/SSLEngine generation |
| PIP-339 | Introducing the --log-topic Option for Pulsar Sinks and Sources |
| PIP-342 | Support OpenTelemetry metrics in Pulsar client |
| PIP-343 | Use picocli instead of jcommander |
| PIP-344 | Correct the behavior of the public API pulsarClient.getPartitionsForTopic(topicName) |
| PIP-347 | add role field in consumer's stat |
| PIP-348 | Trigger offload on topic load stage |
| PIP-349 | Add additionalSystemCursorNames ignore list for ttl check |
| PIP-350 | Allow to disable the managedLedgerOffloadDeletionLagInMillis |
| PIP-351 | Additional options for Pulsar-Test client to support KeyStore based TLS |
| PIP-352 | Event time based topic compactor |
| PIP-353 | Improve transaction message visibility for peek-messages cli |
| PIP-354 | apply topK mechanism to ModularLoadManagerImpl |
| PIP-355 | Enhancing Broker-Level Metrics for Pulsar |
| PIP-356 | Support Geo-Replication starts at earliest position |
| PIP-357 | Correct the conf name in load balance module. |
| PIP-358 | let resource weight work for OverloadShedder, LeastLongTermMessageRate, ModularLoadManagerImpl. |
| PIP-359 | Support custom message listener executor for specific subscription |
| PIP-360 | Admin API to display Schema metadata |
| PIP-363 | Add callback parameters to the method: org.apache.pulsar.client.impl.SendCallback.sendComplete. |
| PIP-364 | Introduce a new load balance algorithm AvgShedder |
| PIP-366 | Support to specify different config for Configuration and Local Metadata Store |
| PIP-367 | Propose a Contributor Repository for Pulsar |
| PIP-368 | Support lookup based on the lookup properties |
| PIP-369 | Flag based selective unload on changing ns-isolation-policy |
| PIP-370 | configurable remote topic creation in geo-replication |
| PIP-373 | Add a topic's system prop that indicates whether users have published TXN messages in before. |
| PIP-374 | Visibility of messages in receiverQueue for the consumers |
| PIP-376 | Make Topic Policies Service Pluggable |
| PIP-378 | Add ServiceUnitStateTableView abstraction (ExtensibleLoadMangerImpl only) |
| PIP-379 | Key_Shared Draining Hashes for Improved Message Ordering |
| PIP-380 | Support setting up specific namespaces to skipping the load-shedding |
| PIP-381 | Handle large PositionInfo state |
| PIP-383 | Support granting/revoking permissions for multiple topics |
| PIP-384 | ManagedLedger interface decoupling |
| PIP-389 | Add Producer config compressMinMsgBodySize to improve compression performance |
| PIP-391 | Improve Batch Messages Acknowledgment |
| PIP-392 | Add configuration to enable consistent hashing to select active consumer for partitioned topic |
| PIP-393 | Improve performance of Negative Acknowledgement |
| PIP-395 | Add Proxy configuration to support configurable response headers for http reverse-proxy |
| PIP-396 | Align WindowFunction's WindowContext with BaseContext |
| PIP-399 | Fix Metric Name for Delayed Queue |
| PIP-401 | Support set batching configurations for Pulsar Functions&Sources |
| PIP-402 | Role Anonymizer for Pulsar Logging |
| PIP-404 | Introduce per-ledger properties |
| PIP-406 | Introduce metrics related to dispatch throttled events |
| PIP-407 | Add a newMessage API to create a message with a schema and transaction |
| PIP-409 | support producer configuration for retry/dead letter topic producer |
| PIP-412 | Support setting messagePayloadProcessor in Pulsar Functions and Sinks |
| PIP-414 | Enforce topic consistency check |
| PIP-415 | Support getting message ID by index |
| PIP-416 | Add a new topic method to implement trigger offload by size threshold |
| PIP-420 | Provides an ability for Pulsar clients to integrate with third-party schema registry service |
| PIP-421 | Require Java 17 as the minimum for Pulsar Java client SDK |
| PIP-422 | Support global topic-level policy: replicated clusters and new API to delete topic-level policies |
| PIP-425 | Support connecting with next available endpoint for multi-endpoint serviceUrls |
| PIP-427 | Align pulsar-admin Default for Mark-Delete Rate with Broker Configuration |
| PIP-428 | Change TopicPoliciesService interface to fix consistency issues |
| PIP-429 | Optimize Handling of Compacted Last Entry by Skipping Payload Buffer Parsing |
| PIP-430 | Pulsar Broker cache improvements: refactoring eviction and adding a new cache strategy based on expected read count |
| PIP-431 | Add Creation and Last Publish Timestamps to Topic Stats |
| PIP-432 | Add isEncrypted field to EncryptionContext |
| PIP-433 | Optimize the conflicts of the replication and automatic creation mechanisms, including the automatic creation of topics and schemas |
| PIP-435 | Add startTimestamp and endTimestamp for consuming messages in client cli |
| PIP-436 | Add decryptFailListener to Consumer |