diff --git a/MAINTAINERS b/MAINTAINERS
index 6345e7f8a65d..0d36c7e7e84d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1705,7 +1705,7 @@ F: app/test/test_bpf.c
 F: app/test-pmd/bpf_cmd.*
 F: doc/guides/prog_guide/bpf_lib.rst
 
-Graph - EXPERIMENTAL
+Graph
 M: Jerin Jacob <jerinj@marvell.com>
 M: Kiran Kumar K <kirankumark@marvell.com>
 M: Nithin Dabilpuram <ndabilpuram@marvell.com>
diff --git a/lib/graph/rte_graph.h b/lib/graph/rte_graph.h
index 7e94c151ae42..7c606eda710d 100644
--- a/lib/graph/rte_graph.h
+++ b/lib/graph/rte_graph.h
@@ -8,10 +8,6 @@
 /**
  * @file rte_graph.h
  *
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
  * Graph architecture abstracts the data processing functions as
  * "node" and "link" them together to create a complex "graph" to enable
  * reusable/modular data processing functions.
@@ -249,7 +245,6 @@ struct rte_graph_cluster_node_stats {
  * @return
  *   Unique graph id on success, RTE_GRAPH_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_graph_t rte_graph_create(const char *name, struct rte_graph_param *prm);
 
 /**
@@ -263,7 +258,6 @@ rte_graph_t rte_graph_create(const char *name, struct rte_graph_param *prm);
  * @return
  *   0 on success, error otherwise.
  */
-__rte_experimental
 int rte_graph_destroy(rte_graph_t id);
 
 /**
@@ -285,7 +279,6 @@ int rte_graph_destroy(rte_graph_t id);
  * @return
  *   Valid graph id on success, RTE_GRAPH_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_graph_t rte_graph_clone(rte_graph_t id, const char *name, struct rte_graph_param *prm);
 
 /**
@@ -297,7 +290,6 @@ rte_graph_t rte_graph_clone(rte_graph_t id, const char *name, struct rte_graph_p
  * @return
  *   Graph id on success, RTE_GRAPH_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_graph_t rte_graph_from_name(const char *name);
 
 /**
@@ -309,7 +301,6 @@ rte_graph_t rte_graph_from_name(const char *name);
  * @return
  *   Graph name on success, NULL otherwise.
  */
-__rte_experimental
 char *rte_graph_id_to_name(rte_graph_t id);
 
 /**
@@ -323,7 +314,6 @@ char *rte_graph_id_to_name(rte_graph_t id);
  * @return
  *   0 on success, error otherwise.
  */
-__rte_experimental
 int rte_graph_export(const char *name, FILE *f);
 
 /**
@@ -336,7 +326,6 @@ int rte_graph_export(const char *name, FILE *f);
  * @return
  *   0 on success, error otherwise.
  */
-__rte_experimental
 int rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore);
 
 /**
@@ -345,7 +334,6 @@ int rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore);
  * @param id
  * Graph id to get the pointer of graph object
  */
-__rte_experimental
 void rte_graph_model_mcore_dispatch_core_unbind(rte_graph_t id);
 
 /**
@@ -362,7 +350,6 @@ void rte_graph_model_mcore_dispatch_core_unbind(rte_graph_t id);
  *
  * @see rte_graph_walk()
  */
-__rte_experimental
 struct rte_graph *rte_graph_lookup(const char *name);
 
 /**
@@ -371,7 +358,6 @@ struct rte_graph *rte_graph_lookup(const char *name);
  * @return
  *   Maximum graph count.
  */
-__rte_experimental
 rte_graph_t rte_graph_max_count(void);
 
 /**
@@ -382,7 +368,6 @@ rte_graph_t rte_graph_max_count(void);
  * @param id
  *   Graph id to get graph info.
  */
-__rte_experimental
 void rte_graph_dump(FILE *f, rte_graph_t id);
 
 /**
@@ -391,7 +376,6 @@ void rte_graph_dump(FILE *f, rte_graph_t id);
  * @param f
  *   File pointer to dump graph info.
  */
-__rte_experimental
 void rte_graph_list_dump(FILE *f);
 
 /**
@@ -404,7 +388,6 @@ void rte_graph_list_dump(FILE *f);
  * @param all
  *   true to dump nodes in the graph.
  */
-__rte_experimental
 void rte_graph_obj_dump(FILE *f, struct rte_graph *graph, bool all);
 
 /** Macro to browse rte_node object after the graph creation */
@@ -425,7 +408,6 @@ void rte_graph_obj_dump(FILE *f, struct rte_graph *graph, bool all);
  * @return
  *   Node pointer on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_node *rte_graph_node_get(rte_graph_t graph_id, rte_node_t node_id);
 
 /**
@@ -439,7 +421,6 @@ struct rte_node *rte_graph_node_get(rte_graph_t graph_id, rte_node_t node_id);
  * @return
  *   Node pointer on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_node *rte_graph_node_get_by_name(const char *graph,
 					    const char *name);
 
@@ -453,7 +434,6 @@ struct rte_node *rte_graph_node_get_by_name(const char *graph,
  * @return
  *   Valid pointer on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_graph_cluster_stats *rte_graph_cluster_stats_create(
 			const struct rte_graph_cluster_stats_param *prm);
 
@@ -463,7 +443,6 @@ struct rte_graph_cluster_stats *rte_graph_cluster_stats_create(
  * @param stat
  *    Valid cluster pointer to destroy.
  */
-__rte_experimental
 void rte_graph_cluster_stats_destroy(struct rte_graph_cluster_stats *stat);
 
 /**
@@ -474,7 +453,6 @@ void rte_graph_cluster_stats_destroy(struct rte_graph_cluster_stats *stat);
  * @param skip_cb
  *   true to skip callback function invocation.
  */
-__rte_experimental
 void rte_graph_cluster_stats_get(struct rte_graph_cluster_stats *stat,
 				 bool skip_cb);
 
@@ -484,7 +462,6 @@ void rte_graph_cluster_stats_get(struct rte_graph_cluster_stats *stat,
  * @param stat
  *   Valid cluster stats pointer.
  */
-__rte_experimental
 void rte_graph_cluster_stats_reset(struct rte_graph_cluster_stats *stat);
 
 /**
@@ -518,7 +495,6 @@ struct rte_node_register {
  *
  * @see RTE_NODE_REGISTER()
  */
-__rte_experimental
 rte_node_t __rte_node_register(const struct rte_node_register *node);
 
 /**
@@ -550,7 +526,6 @@ rte_node_t __rte_node_register(const struct rte_node_register *node);
  * @return
  *   Valid node id on success, RTE_NODE_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_node_t rte_node_clone(rte_node_t id, const char *name);
 
 /**
@@ -563,7 +538,6 @@ rte_node_t rte_node_clone(rte_node_t id, const char *name);
  * @return
  *   Valid node id on success, RTE_NODE_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_node_t rte_node_from_name(const char *name);
 
 /**
@@ -575,7 +549,6 @@ rte_node_t rte_node_from_name(const char *name);
  * @return
  *   Valid node name on success, NULL otherwise.
  */
-__rte_experimental
 char *rte_node_id_to_name(rte_node_t id);
 
 /**
@@ -587,7 +560,6 @@ char *rte_node_id_to_name(rte_node_t id);
  * @return
  *   Valid edge count on success, RTE_EDGE_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_edge_t rte_node_edge_count(rte_node_t id);
 
 /**
@@ -606,7 +578,6 @@ rte_edge_t rte_node_edge_count(rte_node_t id);
  * @return
  *   Valid edge count on success, 0 otherwise.
  */
-__rte_experimental
 rte_edge_t rte_node_edge_update(rte_node_t id, rte_edge_t from,
 				const char **next_nodes, uint16_t nb_edges);
 
@@ -621,7 +592,6 @@ rte_edge_t rte_node_edge_update(rte_node_t id, rte_edge_t from,
  * @return
  *   New size on success, RTE_EDGE_ID_INVALID otherwise.
  */
-__rte_experimental
 rte_edge_t rte_node_edge_shrink(rte_node_t id, rte_edge_t size);
 
 /**
@@ -637,7 +607,6 @@ rte_edge_t rte_node_edge_shrink(rte_node_t id, rte_edge_t size);
  *   When next_nodes == NULL, it returns the size of the array else
  *  number of item copied.
  */
-__rte_experimental
 rte_node_t rte_node_edge_get(rte_node_t id, char *next_nodes[]);
 
 /**
@@ -646,7 +615,6 @@ rte_node_t rte_node_edge_get(rte_node_t id, char *next_nodes[]);
  * @return
  *   Maximum nodes count.
  */
-__rte_experimental
 rte_node_t rte_node_max_count(void);
 
 /**
@@ -657,7 +625,6 @@ rte_node_t rte_node_max_count(void);
  * @param id
  *   Node id to get the info.
  */
-__rte_experimental
 void rte_node_dump(FILE *f, rte_node_t id);
 
 /**
@@ -666,7 +633,6 @@ void rte_node_dump(FILE *f, rte_node_t id);
  * @param f
  *   File pointer to dump the node info.
  */
-__rte_experimental
 void rte_node_list_dump(FILE *f);
 
 /**
diff --git a/lib/graph/rte_graph_model_mcore_dispatch.h b/lib/graph/rte_graph_model_mcore_dispatch.h
index 3bf210a82933..75ec388cada7 100644
--- a/lib/graph/rte_graph_model_mcore_dispatch.h
+++ b/lib/graph/rte_graph_model_mcore_dispatch.h
@@ -8,10 +8,6 @@
 /**
  * @file rte_graph_model_mcore_dispatch.h
  *
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
  * These APIs allow to set core affinity with the node and only used for mcore
  * dispatch model.
  */
@@ -48,7 +44,6 @@ extern "C" {
  * This implementation is used by mcore dispatch model only and user application
  * should not call it directly.
  */
-__rte_experimental
 bool __rte_noinline __rte_graph_mcore_dispatch_sched_node_enqueue(struct rte_node *node,
 								  struct rte_graph_rq_head *rq);
 
@@ -64,7 +59,6 @@ bool __rte_noinline __rte_graph_mcore_dispatch_sched_node_enqueue(struct rte_nod
  * This implementation is used by mcore dispatch model only and user application
  * should not call it directly.
  */
-__rte_experimental
 void __rte_graph_mcore_dispatch_sched_wq_process(struct rte_graph *graph);
 
 /**
@@ -79,7 +73,6 @@ void __rte_graph_mcore_dispatch_sched_wq_process(struct rte_graph *graph);
  * @return
  *   0 on success, error otherwise.
  */
-__rte_experimental
 int rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name,
 							   unsigned int lcore_id);
 
@@ -92,7 +85,6 @@ int rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name,
  *
  * @see rte_graph_lookup()
  */
-__rte_experimental
 static inline void
 rte_graph_walk_mcore_dispatch(struct rte_graph *graph)
 {
diff --git a/lib/graph/rte_graph_worker.h b/lib/graph/rte_graph_worker.h
index 6685600813ac..03d0e01b6850 100644
--- a/lib/graph/rte_graph_worker.h
+++ b/lib/graph/rte_graph_worker.h
@@ -22,7 +22,6 @@ extern "C" {
  *
  * @see rte_graph_lookup()
  */
-__rte_experimental
 static inline void
 rte_graph_walk(struct rte_graph *graph)
 {
diff --git a/lib/graph/rte_graph_worker_common.h b/lib/graph/rte_graph_worker_common.h
index a3824590cd6a..3a18dc4ef25c 100644
--- a/lib/graph/rte_graph_worker_common.h
+++ b/lib/graph/rte_graph_worker_common.h
@@ -8,10 +8,6 @@
 /**
  * @file rte_graph_worker_common.h
  *
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
  * This API allows a worker thread to walk over a graph and nodes to create,
  * process, enqueue and move streams of objects to the next nodes.
  */
@@ -148,7 +144,6 @@ struct rte_node {
  * @param node
  *   Pointer to the node object.
  */
-__rte_experimental
 void __rte_node_stream_alloc(struct rte_graph *graph, struct rte_node *node);
 
 /**
@@ -165,7 +160,6 @@ void __rte_node_stream_alloc(struct rte_graph *graph, struct rte_node *node);
  * @param req_size
  *   Number of objects to be allocated.
  */
-__rte_experimental
 void __rte_node_stream_alloc_size(struct rte_graph *graph,
 				  struct rte_node *node, uint16_t req_size);
 
@@ -293,7 +287,6 @@ __rte_node_next_node_get(struct rte_node *node, rte_edge_t next)
  * @param nb_objs
  *   Number of objs to enqueue.
  */
-__rte_experimental
 static inline void
 rte_node_enqueue(struct rte_graph *graph, struct rte_node *node,
 		 rte_edge_t next, void **objs, uint16_t nb_objs)
@@ -320,7 +313,6 @@ rte_node_enqueue(struct rte_graph *graph, struct rte_node *node,
  * @param obj
  *   Obj to enqueue.
  */
-__rte_experimental
 static inline void
 rte_node_enqueue_x1(struct rte_graph *graph, struct rte_node *node,
 		    rte_edge_t next, void *obj)
@@ -350,7 +342,6 @@ rte_node_enqueue_x1(struct rte_graph *graph, struct rte_node *node,
  * @param obj1
  *   Obj to enqueue.
  */
-__rte_experimental
 static inline void
 rte_node_enqueue_x2(struct rte_graph *graph, struct rte_node *node,
 		    rte_edge_t next, void *obj0, void *obj1)
@@ -385,7 +376,6 @@ rte_node_enqueue_x2(struct rte_graph *graph, struct rte_node *node,
  * @param obj3
  *   4th obj to enqueue.
  */
-__rte_experimental
 static inline void
 rte_node_enqueue_x4(struct rte_graph *graph, struct rte_node *node,
 		    rte_edge_t next, void *obj0, void *obj1, void *obj2,
@@ -419,7 +409,6 @@ rte_node_enqueue_x4(struct rte_graph *graph, struct rte_node *node,
  * @param nb_objs
  *   Number of objs to enqueue.
  */
-__rte_experimental
 static inline void
 rte_node_enqueue_next(struct rte_graph *graph, struct rte_node *node,
 		      rte_edge_t *nexts, void **objs, uint16_t nb_objs)
@@ -449,7 +438,6 @@ rte_node_enqueue_next(struct rte_graph *graph, struct rte_node *node,
  *
  * @see rte_node_next_stream_put().
  */
-__rte_experimental
 static inline void **
 rte_node_next_stream_get(struct rte_graph *graph, struct rte_node *node,
 			 rte_edge_t next, uint16_t nb_objs)
@@ -480,7 +468,6 @@ rte_node_next_stream_get(struct rte_graph *graph, struct rte_node *node,
  *
  * @see rte_node_next_stream_get().
  */
-__rte_experimental
 static inline void
 rte_node_next_stream_put(struct rte_graph *graph, struct rte_node *node,
 			 rte_edge_t next, uint16_t idx)
@@ -509,7 +496,6 @@ rte_node_next_stream_put(struct rte_graph *graph, struct rte_node *node,
  * @param next
  *   Relative next node index.
  */
-__rte_experimental
 static inline void
 rte_node_next_stream_move(struct rte_graph *graph, struct rte_node *src,
 			  rte_edge_t next)
@@ -540,7 +526,6 @@ rte_node_next_stream_move(struct rte_graph *graph, struct rte_node *src,
  * @return
  *   True if graph model is valid, false otherwise.
  */
-__rte_experimental
 bool
 rte_graph_model_is_valid(uint8_t model);
 
@@ -554,7 +539,6 @@ rte_graph_model_is_valid(uint8_t model);
  * @return
  *   0 on success, -1 otherwise.
  */
-__rte_experimental
 int rte_graph_worker_model_set(uint8_t model);
 
 /**
@@ -569,7 +553,6 @@ int rte_graph_worker_model_set(uint8_t model);
  * @return
  *   Graph worker model on success.
  */
-__rte_experimental
 uint8_t rte_graph_worker_model_get(struct rte_graph *graph);
 
 /**
@@ -584,7 +567,6 @@ uint8_t rte_graph_worker_model_get(struct rte_graph *graph);
  * @return
  *   Graph worker model on success.
  */
-__rte_experimental
 static __rte_always_inline
 uint8_t rte_graph_worker_model_no_check_get(struct rte_graph *graph)
 {
diff --git a/lib/graph/version.map b/lib/graph/version.map
index 7e985d630820..7ec1de89585b 100644
--- a/lib/graph/version.map
+++ b/lib/graph/version.map
@@ -1,4 +1,4 @@
-EXPERIMENTAL {
+DPDK_24 {
 	global:
 
 	__rte_graph_mcore_dispatch_sched_node_enqueue;
